2016-12-04 4 views
-1

Я пытаюсь добавить изображение позади каждого подзаголовка фигуры разброса. Я хочу, чтобы мое изображение занимало все пространство подзаголовка. Но я не хочу отображать точки разброса на изображении: То есть, я хочу, чтобы оси моих точек разброса были независимы от оси изображения.Добавить изображение за пределами разброса подсетей независимо от осей точек рассеивания

Когда я просто использую imread() и implot(), делая сюжетный, чтобы вставить изображение, например, так:

im = plt.imread("/Users/mac/Desktop/image.jpeg") 
two = plt.subplot(222) 
implot = plt.imshow(im) 
plt.title('4-8 Hz') 
plt.scatter(X,Y, s=100, marker ='o', c=AveragedHursts4to8, cmap = cm.plasma) 
plt.colorbar() 
two.axis('off') 

Я получаю самое правое изображение внизу, где, очевидно, оси изображений и разброс точек оси разделены.

Я пытался использовать функцию twiny(), чтобы сделать новый набор осей для изображения, с изображением установить в качестве первых осей и вторых осей, установленных в точках рассеяния, например, так:

onetwin = plt.subplot(221) 
plt.title('1-4 Hz') 
implot = plt.imshow(im, zorder=1) 
onetwin.axis('off') 
one = onetwin.twiny() 
plt.scatter(X,Y, s=100, marker ='o', c=AveragedHursts1to4, cmap = cm.plasma, zorder = 2) 
plt.colorbar() 
one.axis('off') 

Там я получаю левое изображение, где точки разброса на оси y, и изображение по какой-то причине было сжато.

И когда я переключаю порядок создания осей на мель, изображение занимает весь подзаговор, а точки разброса вообще не отображаются.

Предложения?

enter image description here

ответ

0

Самое простое, быстрое решение, которое я придумал, чтобы решить для й и у:

largest_x_coodinate_value (х) = x_dimension из image_in_pixels

largest_y_coordinate_value (у) = y_dimension_of_image_in_pixels

И затем векторизованное умножение на массивы numpy, содержащие координаты X и Y, с рассчитанными значениями x, y, эффективно масштабируя координаты до размер изображения.

enter image description here

1

Мое предложение было бы оставить позиции точек нетронутым и масштабировать фоновое изображение соответствующим образом. Для этой цели можно использовать ключевое слово extent для imshow.

В приведенном ниже примере я рисую несколько случайных точек на четырех разных шкалах. Каждый раз, когда изображение масштабируется по размерам диаграммы рассеяния с использованием ключевого слова степени.

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.rand(8*8).reshape((8,8)) 
image = plt.imread("https://upload.wikimedia.org/wikipedia/en/2/27/EU_flag_square.PNG") 

fig, ax = plt.subplots(ncols=4, figsize=(11,3.8)) 

for i in range(len(ax)): 
    ax[i].scatter(x[2*i,:]*10**(i-1), x[2*i+1,:]*10**(i-1), c="#ffcc00", marker="*", s=280, edgecolors='none') 
    xlim = ax[i].get_xlim() 
    ylim = ax[i].get_ylim() 
    mini = min(xlim[0],ylim[0]) 
    maxi = max(xlim[1],ylim[1]) 
    ax[i].imshow(image, extent=[mini, maxi, mini, maxi]) 
plt.tight_layout() 

plt.show() 

enter image description here