如何用Plotly Express按颜色分组数据且展示全数据集趋势线?
解决Plotly多趋势线问题
问题原因:你设置了color="Technology"后,Plotly会自动按Technology的不同类别分组,每个分组单独生成一条趋势线,所以才会出现多条线。要生成覆盖全数据集的单条趋势线,可以用以下两种方法:
方法一:先画全局趋势线,再叠加分组散点
先绘制不带颜色分组的散点图+全局趋势线,再添加按Technology区分颜色的散点层,这样趋势线是全量数据计算的,散点仍保留颜色区分:
# 先绘制全数据集的趋势线(不指定color,确保趋势线是全局的) fig = px.scatter(df, "Date", y="Number", trendline="expanding", trendline_options=dict(function="max")) # 添加按Technology区分颜色的散点 fig.add_scatter(x=df["Date"], y=df["Number"], mode="markers", color=df["Technology"], name="Data Points") # 调整轴标签 fig.update_layout(xaxis_title="Year", yaxis_title="Number")
方法二:手动计算全局趋势线再添加
先画好带颜色分组的散点图,再自己计算全数据集的扩展最大值,手动添加趋势线:
# 先绘制带颜色分组的散点图 fig = px.scatter(df, "Date", y="Number", color="Technology", labels={"Date": "Year", "Number": "Number"}) # 计算全局的扩展最大值 df["global_max"] = df["Number"].expanding().max() # 添加全局趋势线(可自定义线的颜色、样式) fig.add_scatter(x=df["Date"], y=df["global_max"], mode="lines", name="Global Max Trendline", line=dict(color="#000000"))
内容的提问来源于stack exchange,提问作者disruptive
相关产品推荐
相关产品推荐

