【发布时间】:2014-05-09 11:16:57
【问题描述】:
我想知道支配更高级 matplotlib 的人是否可以在这方面帮助我。我有一个热图,可以使用以下代码进行模拟:
import numpy as np
import string
from matplotlib import pylab as plt
def random_letter(chars=string.ascii_uppercase, size=2):
char_arr = np.array(list(chars))
if size > 27:
size = 27
np.random.shuffle(char_arr)
return char_arr[:size]
data = np.random.poisson(1, (174, 40))
y_labels = [', '.join(x for x in random_letter()) for _ in range(174)]
y_labels = sorted(y_labels)
fig, ax = plt.subplots()
fig.set_size_inches(11.7, 16.5)
heatmap = ax.pcolor(data,
cmap=plt.cm.Blues,
vmin=data.min(),
vmax=data.max(),
edgecolors='white')
ax.set_xticks(np.arange(data.shape[1])+.5, minor=False);
ax.set_yticks(np.arange(data.shape[0])+.5, minor=False);
ax.set_xticklabels(np.arange(40), rotation=90);
ax.set_yticklabels(y_labels, fontsize=5);
cb = fig.colorbar(heatmap, shrink=0.33, aspect=10)
我需要在热图上画线,在 ytickslabels 上分离特征,如下图所示(我在其中手动绘制):
任何人都知道如何以编程方式编写 matplotlib 代码来做到这一点?
【问题讨论】:
-
我不清楚您是如何得出水平线的 y 值的;那些和 yticks 有关系吗?
-
我认为 axhline 可以满足您的需求。
-
hline+clip_on=False(抱歉,没有时间写一个更完整的答案) -
@tillsten
axhline非常聪明,并以轴分数单位设置限制,因此它不能做边缘部分。
标签: python matplotlib heatmap