我的 matplot 网格关闭了 -0.5

Posted

技术标签:

【中文标题】我的 matplot 网格关闭了 -0.5【英文标题】:my matplot's Grid is off by -0.5 【发布时间】:2018-10-07 04:50:39 【问题描述】:

我正在尝试使用 matplotlib 库和 python 3 将颜色映射应用于二维数组。为简单起见,我制作了一个示例代码来显示我的问题:

示例代码:

    from matplotlib import pyplot as plt
    from matplotlib import colors
    import numpy as np

    #just an example array
    sample= np.zeros((20,20),dtype=int)
    sample[2,2]=sample[4,4]=2
    #color-table and color bounds
    cmap = colors.ListedColormap(['black','white','red','green'])
    bounds=[-6,0,1,99,105]
    norm = colors.BoundaryNorm(bounds, cmap.N)

    fig, ax = plt.subplots()
    ax.imshow(sample,interpolation='nearest', cmap=cmap, norm=norm)
    ax.grid(which='major', axis='both', linestyle='-', color='k', linewidth=2)
    ax.set_xlim(0, 20)
    ax.set_ylim(20, 0)

    ax.set_xticks(np.arange(0,20,1))
    ax.set_yticks(np.arange(0,20,1))
    plt.show()

使用此代码,我有一个 20 x 20 的网格,除了应该是红色的 [2,2][4,4] 的两个单元格之外,其他地方都是白色的。问题是当我显示我的网格时,单元格在两个方向上都偏离了 -0.5。我从这个示例代码中得到的是:

如果我将网格移动 -0.5:

    ax.set_xticks(np.arange(-0.5,20,1))
    ax.set_yticks(np.arange(-0.5,20,1))

然后我的单元格看起来是正确的,现在网格都错了!

我的代码有什么问题?我真的不明白这怎么会发生?!

【问题讨论】:

【参考方案1】:

ax.imshow 的文档字符串的 Notes 部分说:

除非使用 extent,否则像素中心将位于整数 坐标。换句话说:原点将与中心重合 像素 (0, 0)。

所以你的电话变成了:

ax.imshow(sample, interpolation='none', cmap=cmap, norm=norm,
          extent=[0, 20, 20, 0])

【讨论】:

天啊,非常感谢。你是绝对正确的。添加 extent=[0, 20, 20, 0] 解决了这个问题。

以上是关于我的 matplot 网格关闭了 -0.5的主要内容,如果未能解决你的问题,请参考以下文章

剑道网格弹出编辑器不会关闭

Matplot中文乱码完美解决方式

创建网格线并允许用户打开/关闭网格线视图

matplot:在matplotlib中显示标签的问题[重复]

自定义缩略图网格 3 列? [关闭]

使用网格拖放[关闭]