我正在尝试在散点图的每个子图后面添加一个图像。我希望我的图像占据所有的子图空间。但我不想将散点映射到图像上:也就是说,我希望散点的轴与图像的轴无关。
当我在制作子图片时插入图片时,只需使用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时,图像占据整个子图,并且散点不会显示。
建议?
答案 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()
答案 1 :(得分:0)