如何使用Plotly绘制单条不同分段颜色的折线
解决方案
你报错的核心原因是go.Scatter不存在直接的color参数,折线颜色需要通过line属性配置。以下是完整可运行的实现代码,同时满足定性色阶、hv连线、不拆分单条折线的需求:
import numpy as np import pandas as pd import plotly.express as px import plotly.graph_objects as go from plotly.subplots import make_subplots x_list = [1,2,3,4,5,6] y_list = [5,1,1,4,1,3] color_list = [0,2,0,2,2,1] # 选择定性色盘,可根据需求替换为其他qualitative系列色盘,也可自定义色值列表 qual_colors = px.colors.qualitative.Plotly # 记录已显示的图例类别,避免重复生成图例项 shown_categories = set() fig = make_subplots() # 逐段添加不同颜色的折线段 for i in range(len(x_list)-1): current_color_cat = color_list[i] # 仅首次出现的颜色类别显示在图例中 showlegend = current_color_cat not in shown_categories if showlegend: shown_categories.add(current_color_cat) fig.add_trace(go.Scatter( x=x_list[i:i+2], y=y_list[i:i+2], line_shape='hv', line=dict( color=qual_colors[current_color_cat], width=2 ), mode='lines', name=f'类别{current_color_cat}', showlegend=showlegend )) # 可选模块:添加原始散点,和你最初的散点图效果保持一致,不需要可以删除 fig.add_trace(go.Scatter( x=x_list, y=y_list, mode='markers', marker=dict( color=[qual_colors[c] for c in color_list], size=8 ), showlegend=False )) # 自定义布局 fig.update_layout( xaxis_title='X值', yaxis_title='Y值', legend_title='颜色类别' ) fig.show()
补充说明
- 如果你的
color_list类别数量超过内置定性色盘的颜色数,直接自定义颜色列表即可,比如qual_colors = ["#e6194b", "#3cb44b", "#ffe119", "#4363d8"],按顺序对应你的类别编号即可 - 不需要显示散点的话,直接删除对应添加散点trace的代码块即可
内容的提问来源于stack exchange,提问作者NerdOnTour
相关产品推荐
相关产品推荐

