【问题标题】:How to make matplotlib/pcolor show the last row and column of data如何使 matplotlib/pcolor 显示最后一行和最后一列数据
【发布时间】:2016-02-17 20:52:51
【问题描述】:

matplotlib/pcolor 截断最后一行和最后一列数据。 This post 建议将 x 和 y 参数的维度增加一应该可以解决问题。现在考虑以下简单示例:

x = np.array([1,2])
y = np.array([1,2])
z = np.array([[10,20],[30,40]])

# Using pcolor
fig, ax = plt.subplots()
p = ax.pcolor(x,y,z,vmin=z.min(), vmax=z.max())
ax.set_xlim([x.min(),x.max()])
ax.set_ylim([y.min(),y.max()])
cb = fig.colorbar(p, ax=ax)

# Using matshow (for comparison)
fig, ax = plt.subplots()
ms = ax.matshow(z,vmin=z.min(), vmax=z.max(), origin = 'lower')
ax.xaxis.tick_bottom()
cb = fig.colorbar(ms, ax=ax)

将 x 和 y 的维度增加一,例如,将它们更改为:

x = np.array([1,2,2.1])
y = np.array([1,2,2.1])

不能解决问题。如何使 pcolor 图看起来类似于 matshow 图?

【问题讨论】:

    标签: python matplotlib heatmap


    【解决方案1】:

    试试这个:

    import numpy as np
    from matplotlib import pyplot as plt
    
    x = np.array([1,2,3])
    y = np.array([1,2,3])
    z = np.array([[10,20],[30,40]])
    
    # Using pcolor
    fig, ax = plt.subplots()
    p = ax.pcolor(x,y,z,vmin=z.min(), vmax=z.max())
    ax.set_xlim([x.min(),x.max()])
    ax.set_ylim([y.min(),y.max()])
    cb = fig.colorbar(p, ax=ax)
    plt.show()
    

    编辑:

    x = np.array([0.5,1.5,2.5])
    y = np.array([0.5,1.5,2.5])
    z = np.array([[10,20],[30,40]])
    
    # Using pcolor
    fig, ax = plt.subplots()
    p = ax.pcolor(x,y,z,vmin=z.min(), vmax=z.max())
    ax.set_xticks([1., 2.])
    ax.set_yticks([1., 2.])
    cb = fig.colorbar(p, ax=ax)
    plt.show()
    

    【讨论】:

    • 这看起来不错,但问题是它表明 x 和 y 的范围是 1 到 3,而实际的 x 和 y 是 1 和 2,这可能会产生误导。有什么办法可以将刻度和刻度标签(1 和 2)放在每个矩形的中间?
    • 您必须修改轴和刻度,请参阅我的答案中的编辑
    • 结果图正是我想要的。但是,在这里您已经以适用于这个特定示例的方式操作了原始 x 和 y。是否有更通用的方法适用于任何 x 和 y(即,获取原始的 x 和 y,然后修改它们,使图形看起来像您为这个特定示例所做的那样)?更一般的过程将考虑到 x 和 y 的条目可能并不总是均匀分布。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-28
    • 2018-07-24
    相关资源
    最近更新 更多