Python 在matplotlib轴/图上绘制:获取yticklabel单个位置并将其用于绘制线
我想知道,如果有人谁主宰更先进的matplotlib可以帮助我在这一点上。我有一张热图,可以用以下代码模拟:Python 在matplotlib轴/图上绘制:获取yticklabel单个位置并将其用于绘制线,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,我想知道,如果有人谁主宰更先进的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: si
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)
我需要在热图上画线,在YtickSlabel上分离特征,如下图所示(我用手画):
有人知道如何通过编程方式编写matplotlib来实现这一点吗 我将冒昧地为@tcaswell编写完整的解决方案,实际上只需再写7行:
xl, xh=ax.get_xlim()
left=xl-(xh-xl)*0.1 #10% extension on each side
right=xh+(xh-xl)*0.1
Lines=ax.hlines([5,10,15,20], left, right, color='r', linewidth=1.2)
Lines.set_clip_on(False)
ax.set_xlim((xl, xh))
我不清楚如何推导水平线的y值;那些与Ytick有关吗?我想axhline会做你想做的事。
hline
+clip\u on=False
(对不起,没有时间写一个更完整的答案)@tilstenaxhline
非常聪明,设置了轴分数单位的限制,所以它不能做边缘部分。是的,但是,谁来检测特定标签完成的位置呢?这是主要问题。yticklabel_pos=比如ax.yaxis.get_label_position()这实际上是最简单的部分,只需将[5,10,15,20]
替换为[i for i,v in enumerate(y_labels),如果v in[a list of the_TICK_labels\u YOU想在其上划线]