【问题标题】:How can I set dataless areas of a hist2d plot to the zero-value color?如何将 hist2d 图的无数据区域设置为零值颜色?
【发布时间】:2013-04-06 15:25:55
【问题描述】:

我正在跟踪对象对计算机屏幕指定区域的注视。我正在使用 pyplot 的 hist2d 函数构建凝视热图。

这是一个简单的例子:

figure()
hist2d(xval, yval, bins=1000)
xlim([-6, 6])
ylim([-4.5, 4.5])

如您所见,我的数据范围之外有一个重要区域。但是,我想将此区域设置为表示零值的蓝色。

我第一次尝试使用imshow 可以在这里看到:

figure()
imshow(np.array([[0] * 8] * 12), extent=[-6, 6, -4.5, 4.5])
hist2d(xval, yval, bins=1000)
xlim([-6, 6])
ylim([-4.5, 4.5])

这种方法可行,但在我的数据范围的边界留下一条难看的垂直线。

我的问题如下:

  1. 有没有办法用零值蓝色填充图形,同时避免imshow 调用
  2. 如果没有,如何隐藏垂直线?

【问题讨论】:

  • 白色区域是故意的,因为没有数据本质上是空的,而不是 0。我认为最好的解决方案是扩展您正在绘制的数据。
  • @sashkello,是的,我意识到白色区域是空的,因此我的问题。我看不出如何在不变性的情况下扩展数据。我的问题,“我该如何扩展它”。
  • 如果是可视化问题,我认为没有必要为此陷入困境 - 只需临时修改数据集进行绘图即可。
  • @shashkello,我明白,但我的问题是我不知道如何修改数据集。直方图计算数据的出现次数,因此为了有零值,需要没有数据。我相信hist2d 会清除每个维度中最大值之外的所有坐标。与此同时,我已经想通了。我只需要弄乱range kwarg。
  • @sashkello 仅仅为了绘图而修改数据会很快将其与道德问题真正联系起来。在这种情况下,用零填充可能是合理的,但这仍然是一种不好的态度。图的首要职责是准确,其他一切都是次要的。

标签: python matplotlib histogram


【解决方案1】:

好的,我想通了。其实很简单:只需要​​操作range kwarg。

figure()
#imshow(np.array([[0] * 8] * 12), extent=[-6, 6, -4.5, 4.5])
hist2d(xval, yval, bins=1000, range=np.array([(-6, 6), (-4.5, 4.5)]))
xlim([-6, 6])
ylim([-4.5, 4.5])

【讨论】:

    猜你喜欢
    • 2021-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    相关资源
    最近更新 更多