You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

seaborn热图调用axvline加竖线报ymin参数多值错误是什么原因

错误含义

TypeError: axvline() got multiple values for argument 'ymin' 表示axvline方法的ymin参数被多次赋值,触发冲突。
axvline的参数顺序为axvline(x, ymin=0, ymax=1, **kwargs),你代码中将*ax.get_ylim()作为位置参数传入,get_ylim()返回的两个值会依次赋值给ymin、ymax,后续又显式传入了ymin、ymax关键字参数,导致同一参数被重复赋值,触发报错。
另外补充:axvline的ymin、ymax取值范围为0-1,代表y轴高度的比例,你直接传入数值为几千、几万的lines元素,就算参数不冲突,也会因为超出0-1范围导致线条无法正常显示。

解决方案

根据你的实际需求选择对应修改方式:

1. 竖线占满整个y轴高度

直接删除*ax.get_ylim()参数即可,ymin、ymax默认取值为0和1,刚好对应全高度显示。
修正后代码示例:

lines = [0,10,300,500,2560, 34500]
with sns.axes_style("white"):
    f, ax = plt.subplots(figsize=(50, 50))
    ax = sns.heatmap(X)
    # 可根据需求修改x参数的数值,两个相同x的竖线会重叠
    ax.axvline(4000, lw = 8.0,  color = 'red')
    ax.axvline(5000, lw = 8.0,  color = 'green')

2. 竖线仅显示在y轴指定数据区间

先将你lines里的y轴数据坐标转换为0-1的比例值,再传给ymin、ymax参数,同样删除*ax.get_ylim()参数:
修正后代码示例:

lines = [0,10,300,500,2560, 34500]
with sns.axes_style("white"):
    f, ax = plt.subplots(figsize=(50, 50))
    ax = sns.heatmap(X)
    # 转换数据坐标为轴比例
    y_data_min, y_data_max = ax.get_ylim()
    y_range = y_data_max - y_data_min
    ymin1 = (lines[0] - y_data_min)/y_range
    ymax1 = (lines[4] - y_data_min)/y_range
    ymin2 = (lines[5] - y_data_min)/y_range

    ax.axvline(4000, ymin = ymin1, ymax = ymax1, lw = 8.0,  color = 'red')
    ax.axvline(4000, ymin = ymin2, lw = 8.0,  color = 'green')

内容的提问来源于stack exchange,提问作者Noob Programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:57:03