在散点子图后面添加图像,与散点图轴无关

时间:2016-12-04 16:43:49

标签: python image matplotlib plot scatter-plot

我正在尝试在散点图的每个子图后面添加一个图像。我希望我的图像占据所有的子图空间。但我不想将散点映射到图像上:也就是说,我希望散点的轴与图像的轴无关。

当我在制作子图片时插入图片时,只需使用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轴上被压扁,并且由于某种原因,图像已经缩小。

当我将创建轴的顺序切换为twiny时,图像占据整个子图,并且散点不会显示。

建议?

enter image description here

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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数组上进行矢量化乘法,计算x,y值,有效地将坐标缩放到图像的大小。

enter image description here