尝试在 seaborn 中绘制两条单独的线时出现错误

I am getting error when trying to plot two seperate lines in 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'.

这是什么意思?

According to the documentation,,axvline的签名是

axvline(x=0, ymin=0, ymax=1, **kwargs)

所以当你这样做时

ax.axvline(4000, *ax.get_ylim(), ymin = lines[0], ymax = lines[4],

(和 get_ylim() returns 一个二元组),你传递了 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')