Plotly堆叠分组柱状图:为指定列添加颜色区分的问题
解决Plotly Express堆叠柱状图颜色区分问题
方法一:直接用color_discrete_map指定颜色(无需转换数据格式)
当你用y=['power', 'rf', 'glob']传入多列时,Plotly会自动为每一列生成独立的柱状图trace。不用手动给color传列名列表,直接用color_discrete_map绑定列名和对应颜色即可:
import plotly.express as px # 生成堆叠柱状图并指定各列颜色 fig = px.bar(month_df, x='date', y=['power', 'rf', 'glob'], color_discrete_map={ 'power': '#FF5733', # 支持十六进制色值或颜色名称 'rf': '#33FF57', 'glob': '#3357FF' }) fig.show()
也可以用update_traces批量设置颜色:
fig = px.bar(month_df, x='date', y=['power', 'rf', 'glob']) # 按列的顺序给三个trace设置颜色 fig.update_traces(marker_color=['#FF5733', '#33FF57', '#3357FF'], selector=dict(type='bar')) fig.show()
方法二:转成长格式数据(Plotly推荐用法)
Plotly Express更适配长格式数据,用pandas.melt把宽格式转成长格式后,就能直接用color参数区分不同指标:
import pandas as pd import plotly.express as px # 将宽格式数据转成长格式 melted_df = month_df.melt( id_vars='date', # 保留的索引列 value_vars=['power', 'rf', 'glob'], # 需要堆叠的目标列 var_name='Metric', # 新生成的指标列名称 value_name='Value' # 新生成的数值列名称 ) # 生成堆叠柱状图,用Metric列区分颜色 fig = px.bar(melted_df, x='date', y='Value', color='Metric', barmode='stack') fig.show()
为什么你之前的代码报错?
你直接给color传['power', 'rf', 'glob']时,Plotly会要求这个参数的长度和x列(date)的长度一致(你的date列有11行),但你传的列表只有3个元素,因此触发了长度不匹配的错误。
内容的提问来源于stack exchange,提问作者Antone Bagnall
相关产品推荐
相关产品推荐

