【发布时间】:2017-11-21 09:58:41
【问题描述】:
我需要绘制一个分类统计数据,就像从scipy.stats.binned_statistic_2d 得到的那样。基本上,这意味着我有边缘值和 bin 内数据。这也意味着我不能(据我所知)使用plt.hist2d。这是一个代码 sn-p 来生成我可能需要绘制的那种数据:
import numpy as np
x_edges = np.arange(6)
y_edges = np.arange(6)
bin_values = np.random.randn(5, 5)
可以想象我可以为此使用pcolormesh,但问题是pcolormesh 不允许bin 边缘值。以下将仅绘制 bin 1 到 4 中的值。第 5 个值被排除在外,因为虽然 pcolormesh “知道” 4.0 处的值是某个值,但没有稍后要绘制的值,因此第 5 个 bin 的宽度为零。
import matplotlib.pyplot as plt
X, Y = np.broadcast_arrays(x_edges[:5, None], y_edges[None, :5])
plt.figure()
plt.pcolormesh(X, Y, bin_values)
plt.show()
我可以通过添加一组与最后一个值相等的附加值来解决这个问题:
import matplotlib.pyplot as plt
X, Y = np.broadcast_arrays(x_edges[:, None], y_edges[None, :])
dummy_bin_values = np.zeros([6, 6])
dummy_bin_values[:5, :5] = bin_values
dummy_bin_values[5, :] = dummy_bin_values[4, :]
dummy_bin_values[:, 5] = dummy_bin_values[:, 4]
plt.figure()
plt.pcolormesh(X, Y, dummy_bin_values)
plt.show()
然而,这是一个丑陋的黑客。有没有更简洁的方法来绘制带有 bin 边缘值的 2D 直方图数据? “不”可能是正确的答案,但如果是的话,请说服我。
【问题讨论】:
标签: python matplotlib