2016-12-04 73 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

我想出了最简单的,最快的解决方案是解决对于x和y:

largest_x_coodinate_value(X)= image_in_pixels的x_dimension

largest_y_coordinate_value(Y)= y_dimension_of_image_in_pixels

然后在包含X和Y坐标的numpy数组上进行向量化乘法运算,并将这些数据有效地缩放到图像的大小。

enter image description here

1

我的建议是离开点的立场不变,并相应地缩放的背景图像。为此,可以使用extent关键字imshow

在下面的例子中,我绘制了四个不同尺度上的一些随机点。每次使用extent关键字将图像缩放到散点图的尺寸时。

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