【发布时间】:2017-11-26 04:39:54
【问题描述】:
我正在尝试使用 matplotlib 使用相同的代码创建多个热图。当然,所有这些热图的数据都不同。正因为如此,热图中的颜色强度是不同的。有没有办法可以确保强度范围保持不变?我在热图中的所有值都介于 0 和 1 之间。所以我希望 heatmap1 中值 0.2 的颜色看起来与 heatmap2 中值 0.2 的颜色完全相同,即使两个热图可能有不同的范围。
对于这个问题的语言有些混乱,我深表歉意,但我不知道如何更好地解释它。
这是我用来生成热图的代码:
from matplotlib import pyplot as plt
def show_values(pc, fmt="%.2f", **kw):
'''
Heatmap with text in each cell with matplotlib's pyplot
Source: http://stackoverflow.com/a/25074150/395857
By HYRY
'''
# from itertools import izip
try:
# Python 2
from itertools import izip
except ImportError:
# Python 3
izip = zip
pc.update_scalarmappable()
ax = pc.get_axes()
for p, color, value in izip(pc.get_paths(), pc.get_facecolors(), pc.get_array()):
x, y = p.vertices[:-2, :].mean(0)
if np.all(color[:3] > 0.5):
color = (0.0, 0.0, 0.0)
else:
color = (1.0, 1.0, 1.0)
ax.text(x, y, fmt % value, ha="center", va="center", color=color, **kw)
df= pd.read_csv("filepath", header=None)
fig, ax = plt.subplots(figsize=(20, 10))
heatmap = plt.pcolor(df,cmap=matplotlib.cm.Blues)
ax.set_yticks(np.arange(df.shape[0]) + 0.5, minor=False)
ax.set_xticks(np.arange(df.shape[1]) + 0.5, minor=False)
ax.set_xticklabels(xlabels, minor=False, rotation=45)
ax.set_yticklabels(ylabels, minor=False)
plt.ylim( (0, df.shape[0]) )
plt.gca().invert_yaxis()
plt.title("plot title")
show_values(heatmap)
plt.show()
任何帮助将不胜感激。
【问题讨论】:
标签: python matplotlib heatmap