【问题标题】:Add image behind scatter subplot independent of scatter points axes在独立于散点轴的散点图后面添加图像
【发布时间】:2016-12-04 16:43:48
【问题描述】:

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

当我简单地使用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 时,图像占据了整个子图,并且散点根本不显示。

建议?

【问题讨论】:

    标签: python image matplotlib plot scatter-plot


    【解决方案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()
    

    【讨论】:

      【解决方案2】:

      我想出的最简单、最快的解决方案是求解 x 和 y:

      largest_x_coodinate_value(x) = x_dimension of image_in_pixels

      largest_y_coordinate_value(y) = y_dimension_of_image_in_pixels

      然后对包含 X 和 Y 坐标的 numpy 数组与计算得到的 x,y 值进行矢量化乘法,有效地将坐标缩放到图像的大小。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-08-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-15
        相关资源
        最近更新 更多