如何设置Plotly折线图:同Run同色,Val_A实线Val_B虚线
问题与解决方案
需求说明
现有如下DataFrame,需修改代码实现:
- 每个
Run对应专属折线颜色 Val_A列数据使用实线,Val_B列数据使用虚线- 最终生成包含12条折线(6个Run × 2个Val指标)、6种颜色、2种线型的图表
原始代码:
import pandas as pd import plotly.express as px df = pd.DataFrame( { "Run": ( 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6 ), "Point": ( 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, ), "Val_A": ( 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, ), "Val_B": ( 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, ), } ) # Create the line plot with solid line for Val_A and dashed line for Val_B fig = px.line(df, x="Point", y=["Val_A", "Val_B"], color="Run", title="Line Plot with Solid and Dashed Lines for Each Run") # Show the plot fig.show()
修改方案
Plotly Express直接传入y=["Val_A", "Val_B"]的方式无法同时绑定color="Run"和独立控制线型,需要先将宽表转换为长表,再通过line_dash参数指定线型规则。
修改后的完整代码
import pandas as pd import plotly.express as px df = pd.DataFrame( { "Run": (1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6), "Point": (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3), "Val_A": (78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77, 78, 79, 77), "Val_B": (76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74, 76, 75, 74), } ) # 宽表转长表:将Val_A、Val_B合并为Variable列,对应数值存入Value列 df_long = pd.melt( df, id_vars=["Run", "Point"], value_vars=["Val_A", "Val_B"], var_name="Variable", value_name="Value" ) # 创建折线图:color绑定Run(同Run同色),line_dash绑定Variable(Val_A实线、Val_B虚线) fig = px.line( df_long, x="Point", y="Value", color="Run", line_dash="Variable", title="每个Run对应专属颜色,Val_A实线/Val_B虚线", # 手动指定线型映射,确保Val_A是实线,Val_B是虚线 line_dash_map={"Val_A": "solid", "Val_B": "dash"} ) # 调整图例名称,提升可读性 fig.update_layout( legend_title_text="Run & 指标" ) fig.show()
关键修改点说明
- 宽表转长表:用
pd.melt将原数据的Val_A、Val_B列转换为Variable分类列,让每个Run+Variable组合对应一条独立折线,满足12条折线的需求。 - 绑定线型参数:新增
line_dash="Variable",让不同指标(Val_A/Val_B)使用不同线型;通过line_dash_map手动指定线型,确保Val_A为实线、Val_B为虚线。 - 颜色绑定:保留
color="Run",确保同一个Run的Val_A和Val_B折线使用相同颜色,实现6种颜色的要求。
内容的提问来源于stack exchange,提问作者Bakira
相关产品推荐
相关产品推荐

