Python用Plotly绘制柱形图时如何设置多color参数实现双维度分色?
问题原因
Plotly Express 的 color 参数仅支持传入单个数据列名,不支持直接传入多列组成的列表,因此你传入["Country","Type"]的写法会触发报错。
解决方案
方案1:构造组合列映射颜色(最简单,适合快速出图)
先将Country和Type两个字段拼接为一个新的组合字段,再将color参数绑定到这个新字段即可同时通过颜色区分两个维度:
import pandas as pd import plotly.express as px # 读取数据集(如果是从剪贴板读取可以用pd.read_clipboard(sep=',', index_col=0)) df = pd.read_csv("你的数据路径.csv", index_col=0) # 构造组合字段 df["Country_Type"] = df["Country"] + "_" + df["Type"] # 绘图 fig = px.bar(df, x="Year", y="Count", barmode="group", color="Country_Type", hover_data=["Country", "Type"] ) fig.show()
如果需要自定义对应类别的颜色,可以新增color_discrete_map参数配置,比如:
color_map = { "USA_A": "#1f77b4", "USA_B": "#aec7e8", "Canada_A": "#ff7f0e", "Canada_B": "#ffbb78" } # 绘图时传入color_discrete_map=color_map即可
方案2:使用graph_objects实现完全独立的双图例
如果需要两个独立的图例(一个控制国家、一个控制Type),可以用底层的plotly.graph_objects手动添加轨迹实现,灵活性更高:
import plotly.graph_objects as go import pandas as pd df = pd.read_csv("你的数据路径.csv", index_col=0) countries = df["Country"].unique() types = df["Type"].unique() # 颜色配置:每个国家对应两个颜色,第一个对应Type A,第二个对应Type B colors = {"USA": ["#1f77b4", "#aec7e8"], "Canada": ["#ff7f0e", "#ffbb78"]} fig = go.Figure() # 遍历每个国家和Type添加柱状轨迹 for country in countries: for i, typ in enumerate(types): filter_df = df[(df["Country"] == country) & (df["Type"] == typ)] fig.add_trace(go.Bar( x = filter_df["Year"], y = filter_df["Count"], name = f"{country} - {typ}", legendgroup = country, marker_color = colors[country][i] )) fig.update_layout(barmode="group") fig.show()
内容的提问来源于stack exchange,提问作者Martan
相关产品推荐
相关产品推荐

