【问题标题】:Adding hatches to imshow - Matplotlib向 imshow 添加影线 - Matplotlib
【发布时间】:2014-08-07 14:17:20
【问题描述】:

基本上,我想做的是this问题的答案中解释的想法。

我用imshow 绘制一个 100 x 100 的图像,并且在某些点上,我想绘制阴影。

所以,这是我的图片示例:

这表示 100 个标量场样本的平均值。我也有这个样本的标准偏差:

所以,我想做的是在标准差 > 0.0 的位置绘制平均属性与阴影的组合。

我的数据是 100 x 100,它的尺寸从 -4 到 4 变化。 按照here 提出的想法,我目前的做法是:

plt.figure()
fig = plt.imshow(scalar_field, origin='lower', extent=(-4, 4, -4, 4))
plt.colorbar(fig)

x_indices = numpy.nonzero(standard_deviation)[0]
y_indices = numpy.nonzero(standard_deviation)[1]

ax = plt.gca()
for p in range(len(x_indices)):
    i = x_indices[p]
    j = y_indices[p]
    ax.add_patch(patches.Rectangle((i-.5, j-.5), 1, 1, hatch='//', fill=False, snap=False))

plt.show()
plt.close()

但是,我没有在正确的位置获得模式。到目前为止我还没有使用过补丁,我不知道我是否以正确的方式使用它们。

任何帮助将不胜感激。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    您需要将索引 (0..99) 转换为图像的比例 (-4..4),并且每个块的大小不是 1、1 而是 0.08、0.08。此外,您还需要 Rectangle 中的 ec='None' 来移除块之间的边缘。我相信它会发生:

    ax.add_patch(patches.Rectangle(((i-50.5)*0.08-.04, (j-50.5)*0.08), 0.08, 0.08, 
       hatch='//', fill=False, snap=False, linewidth=0))
    

    但是,我怀疑你会用阴影填充整个区域:你确定 stddev 在某些地方正好为零(它永远不会小于零)。

    【讨论】:

    • 是的,你是对的。它都可以是非零的。我会使用一些限制。我这里只用0来说明。
    • 谢谢。我怀疑是否必须使用 ndarray 大小或将它们转换为图像的比例(每次我遇到这个问题时,我都无法在某些文档中找到它)。
    • 您是否找到了可行的替代方案(如果是,请编辑我的答案)。顺便说一下,另一种选择是另一种具有 alpha 透明度的 imshow/pcolor。
    • 我正在寻找它。如果我找到了,我会在这里展示。 (:再次感谢您。
    • 也许阴影被认为是边缘?
    【解决方案2】:

    您可以使用contourf 添加它们,而不是在多个矩形中添加阴影线,如contourf hatching example 中所述。这是一个更好的解决方案,因为它更通用并且只需要一行:

    plt.contourf(mask, 1, hatches=['', '//'], alpha=0)
    

    其中mask 是与您的图像大小相同的二进制图像。在这里,我们将 alpha 设置为零以使蒙版本身透明,并且仅在蒙版等于 1 的位置添加阴影。另请注意,originextent 参数需要匹配,因此对于您的代码:

    plt.contourf(standard_deviation > thresh, 1, hatches=['', '//'], alpha=0,
                 origin='lower', extent=(-4, 4, -4, 4))
    

    类似的解决方案是使用pcolor 而不是contourf,如this answer 中所述。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2020-03-12
      • 1970-01-01
      • 2019-01-22
      • 2015-07-30
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多