【问题标题】:pcolormesh ticks center for each data point/tilepcolormesh 标记每个数据点/图块的中心
【发布时间】:2017-08-24 23:35:48
【问题描述】:

我有一些 z=f(x,y) 数据想在热图中显示。所以我使用np.meshgrid 创建一个(x,y)-grid 然后调用pcolormesh。但是,对应于数据点的每个“图块”的刻度并不居中 - 在文档中,我没有找到任何关于如何将每个图块的刻度居中的说明,以便我可以立即读取相应的值。有什么想法吗?

例如,在所附图像中,并不清楚刻度对应于哪个 x 值。

【问题讨论】:

  • (0,0) 的热量不是 0 1。所以我认为从刻度线开始的单元格对应于刻度的 x 位置?

标签: python numpy matplotlib plot heatmap


【解决方案1】:

在 pcolormesh 中,网格由边缘值定义。在以下示例中,左下角的值 6 是每个维度中介于 0 和 1 之间的值。我想这对每个人来说都是完全可以理解的。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.arange(5)
y = np.arange(3)
X,Y = np.meshgrid(x,y)
Z = np.random.randint(1,9, size=(2,4))

plt.pcolormesh(X,Y,Z)

plt.show()

现在如果你想(只)在单元格中间有刻度,你可以如下设置它们

plt.xticks(x[:-1]+0.5)
plt.yticks(y[:-1]+0.5)

如果左下像素实际上不对应0到1之间的数据,而是对应0的数据,则网格是'错误';一个解决方案是通过将其平移一半像素宽度来修复它。

plt.pcolormesh(X-0.5,Y-0.5,Z)

如上所述,刻度可以调整为仅显示某些数字,使用plt.xticks

【讨论】:

  • “像素宽度”一般用于等间距数据(x[1] - x[0])/2,对吗?
  • 不,像素宽度只是(x[1] - x[0])。在上述所有内容中,这是1
猜你喜欢
  • 2018-09-13
  • 2021-09-17
  • 2016-07-25
  • 2017-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-18
  • 1970-01-01
  • 2022-11-01
相关资源
最近更新 更多