【问题标题】:matplotlib pcolor axes scalematplotlib pcolor 坐标轴比例
【发布时间】:2015-01-20 22:25:57
【问题描述】:
我使用 pcolor 绘制了热图:
df = df.groupby(['d','f'])['beta'].sum()
beta_df = df.unstack('f')
plt.pcolor(beta_df)
beta_df 的大小为 35x35,因此开始:
f 0.05 0.06 0.07 0.08 0.09 0.10 ...
d
0.050000 0.993125 0.993264 0.991511 0.995148 1.000422 1.003847
0.105714 0.997931 0.998003 0.997459 1.000743 1.005858 1.001873
...
但是,坐标轴包含从 0 到 35 的整数,而不是 f 和 d 的值。如何解决?
【问题讨论】:
标签:
arrays
matplotlib
pandas
heatmap
【解决方案1】:
首先,建议您使用pcolormesh,而不是pcolor(更快更灵活)。您需要告诉pcolormesh 您的数据的 x 和 y 范围是什么。这是通过使用 x 和 y 值的数组调用它来完成的。假设你的二维数组被称为c,你可以这样做:
plt.pcolormesh(x, y, c)
其中x 是一个包含 x 值的数组,y 是一个包含 y 值的数组。您需要确保x 和y 的尺寸与c 的形状匹配。
【解决方案2】:
我发现这是唯一的保持比例的轴校正方法:
tick_spacing = 10
plt.yticks(np.arange(0, len(df.index), tick_spacing), df.index[0::tick_spacing])
plt.xticks(np.arange(0, len(df.columns), tick_spacing), df.columns[0::tick_spacing])
【解决方案3】:
您可以使用plt.axis() 方法来设置坐标轴值。所以我认为你应该能够做类似的事情(如果我没记错我的熊猫):
xmin = beta_df.index.min()
xmax = beta_df.index.max()
ymax = beta_df.max()
ymin = beta_df.min()
然后:
plt.axis([xmin, xmax, ymin, ymax])
或类似的东西。