我有一对数字列表代表二维空间中的点,我想将这些点的y / x比率表示为一维热图,其中发散的颜色图集中在1左右,或者我的比率的日志,发散的彩色地图以0为中心。
我该怎么做?
我目前的尝试(从Heatmap in matplotlib with pcolor?稍微借用):
from matplotlib import numpy as np
import matplotlib.pyplot as plt
# There must be a better way to generate arrays of random values
x_values = [np.random.random() for _ in range(10)]
y_values = [np.random.random() for _ in range(10)]
labels = list("abcdefghij")
ratios = np.asarray(y_values) / np.asarray(x_values)
axis = plt.gca()
# I transpose the array to get the points arranged vertically
heatmap = axis.pcolor(np.log2([ratios]).T, cmap=plt.cm.PuOr)
# Put labels left of the colour cells
axis.set_yticks(np.arange(len(labels)) + 0.5, minor=False)
# (Not sure I get the label order correct...)
axis.set_yticklabels(labels)
# I don't want ticks on the x-axis: this has no meaning here
axis.set_xticks([])
plt.show()
我不满意的一些观点:
heatmap.colorbar = plt.colorbar()
以RuntimeError: No mappable was found to use for colorbar creation. First define a mappable such as an image (with imshow) or a contour set (with contourf).
一点很重要:
答案 0 :(得分:3)
还有两行:
axis.set_aspect('equal') # X scale matches Y scale
plt.colorbar(mappable=heatmap) # Tells plt where it should find the color info.
无法很好地回答你的最后一个问题。部分原因是我们在matplotlib
中有两个分支处理:轴方式(axis.do_something
...)和MATLAB
克隆方式plt.some_plot_method
。不幸的是,我们无法改变这一点,这是人们迁移到matplotlib
的一个很好的功能。至于"清洁方式"我担心,我更喜欢使用产生较短代码的东西。我想这与Python
座右铭是一致的:简单比复杂的和可读性计数更好。