我希望在热图上写两行不同的文字。我的代码是
lines = [0,10,300,500,2560, 34500]
with sns.axes_style("white"):
f, ax = plt.subplots(figsize=(50, 50))
ax = sns.heatmap(X)
ax.axvline(4000, *ax.get_ylim(), ymin = lines[0], ymax = lines[4], lw = 8.0, color = 'red')
ax.axvline(4000, *ax.get_ylim(), ymin = lines[5], lw = 8.0, color = 'green')
,我得到一个错误,像
TypeError: axvline() got multiple values for argument 'ymin'.
那是什么意思?
根据文件,,axvline
的签名为
axvline(x=0, ymin=0, ymax=1, **kwargs)
所以当你做
ax.axvline(4000, *ax.get_ylim(), ymin = lines[0], ymax = lines[4],
(和get_ylim()
返回一个2元组),你传递ymin
和ymax
两次。
你需要
- 不使用
*ax.get_ylim()
,或者 - 不单独使用
ymin
和ymax
这个问题有一个解决办法。上面的评论者提到,y轴应该总是取0到1之间的数字。
所以我们可以用百分比来做一个工作。
lines = [0,10,300,500,2560, 34500]
p_1 = lines[4]/lines[-1]
p_2 = 1
with sns.axes_style("white"):
f, ax = plt.subplots(figsize=(50, 50))
ax = sns.heatmap(X)
ax.axvline(4000, *ax.get_ylim(), ymin = 1-p1, ymax = p2, lw = 8.0, color = 'red')
ax.axvline(4000, *ax.get_ylim(), ymin = 0,ymax = 1-p1, lw = 8.0, color = 'green')