当试图在seaborn中绘制两条单独的线时,我得到了错误



我希望在热图上写两行不同的文字。我的代码是

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元组),你传递yminymax两次。

你需要

  • 不使用*ax.get_ylim(),或者
  • 不单独使用yminymax

这个问题有一个解决办法。上面的评论者提到,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')

相关内容

  • 没有找到相关文章

最新更新