如何在Plotly Express散点图中添加固定Y值的水平线
在Plotly Express散点图中添加贯穿整个图表的水平线
没问题,这个需求用Plotly的add_hline()方法就能轻松解决,完全不用操心x轴的变化——它会自动让水平线贯穿整个图表范围,正好适配你x轴不固定的场景。
直接可用的完整代码
import plotly.express as px import pandas as pd df = pd.DataFrame({"x":[0, 1, 2, 3, 4,6,8,10,12,15,18], "y":[0, 1, 4, 9, 16,13,14,18,19,5,12]}) fig = px.scatter(df, x="x", y="y") # 添加y=5的水平线,可选自定义样式和标注 fig.add_hline( y=5, line_dash="dash", # 设置虚线样式 line_color="red", annotation_text="y=5", # 添加标注文本 annotation_position="bottom right" # 标注位置 ) # 添加y=18的水平线 fig.add_hline( y=18, line_dash="dash", line_color="blue", annotation_text="y=18", annotation_position="top right" ) fig.show()
为什么推荐add_hline()?
这个方法是Plotly专门为添加水平线设计的,核心优势在于:
- 无需手动指定x轴的起始/结束值,自动适配当前图表的x轴范围,哪怕你的x轴数据后续发生变化(比如筛选、更新),水平线都会自动贯穿整个新的图表区域。
- 支持直接设置样式(颜色、线型)和添加标注,一步到位,不用额外处理布局细节。
备选方案:用update_layout()添加形状
如果你更习惯通过布局配置来实现,也可以用shapes参数,但需要手动获取x轴的极值,缺点是x轴变化后需要重新更新极值:
fig.update_layout( shapes=[ dict( type="line", y0=5, y1=5, x0=df['x'].min(), x1=df['x'].max(), line=dict(color="red", dash="dash") ), dict( type="line", y0=18, y1=18, x0=df['x'].min(), x1=df['x'].max(), line=dict(color="blue", dash="dash") ) ] )
显然第一种方法更省心,推荐优先使用add_hline()。
内容的提问来源于stack exchange,提问作者min2bro
相关产品推荐
相关产品推荐

