【问题标题】:How to set color different in plotly express based on conditions如何根据条件在情节表达中设置不同的颜色
【发布时间】:2021-12-14 14:53:41
【问题描述】:

我绘制了一个堆积条形图,并希望将 Apr_max 设置为与其他 (RED) 不同的第一列颜色(例如绿色)。

目前我的代码是:

fig_page2 = px.bar(data_frame=df_raw,
                 x='Company', y=['Apr_Min', 'Apr_Max'],
                 barmode="stack", labels={'variable': ' ', 'value':'Number'},
                 color_discrete_sequence=['rgb(233,233,233)', 'rgb(255,69,0)'],
                 width=1000, height=400).update_layout(autosize=True,
                                                       title={
                                                            'text': "APR Comparison", 'y':0.9,'x':0.5,
                                                            'xanchor': 'center',
                                                            'yanchor': 'middle'},
                                                       yaxis=dict(title='APR Range', tickformat=',.0%', range=[0,1]),
                                                       paper_bgcolor='rgb(233,233,233)',
                                                       plot_bgcolor='rgb(233,233,233)',
                                                       showlegend=False)

结果如下: enter image description here

如何将突出显示的条设置为绿色,同时保留其余颜色?

ps:我的数据集: enter image description here

【问题讨论】:

    标签: colors bar-chart plotly-python


    【解决方案1】:
    • 创建数据框以匹配您的数据框的结构(注意您的图片错过了 Company 列)
    • 完全按照您的方式创建图形(只是格式化代码)
    • 更新图形以将 Apr_Max 跟踪的 ma​​rker_color 更改为 列表 而不是字符串。第一列绿色,所有其他列的颜色是在创建图形时分配的
    import pandas as pd
    import numpy as np
    import plotly.express as px
    
    df_raw = pd.DataFrame(
        {
            "Apr_Min": np.random.uniform(0.1, 0.3, 10),
            "Apr_Max": np.random.uniform(0.3, 0.7, 10),
            "Company": list("ABCDEFGHIJKLMNOPQR")[0:10],
        }
    )
    
    fig_page2 = px.bar(
        data_frame=df_raw,
        x="Company",
        y=["Apr_Min", "Apr_Max"],
        barmode="stack",
        labels={"variable": " ", "value": "Number"},
        color_discrete_sequence=["rgb(233,233,233)", "rgb(255,69,0)"],
        width=1000,
        height=400,
    ).update_layout(
        autosize=True,
        title={
            "text": "APR Comparison",
            "y": 0.9,
            "x": 0.5,
            "xanchor": "center",
            "yanchor": "middle",
        },
        yaxis=dict(title="APR Range", tickformat=",.0%", range=[0, 1]),
        paper_bgcolor="rgb(233,233,233)",
        plot_bgcolor="rgb(233,233,233)",
        showlegend=False,
    )
    
    # want different color for first bar... change marker color to a list for appropriate trace
    fig_page2.for_each_trace(
        lambda t: t.update(
            {
                "marker": {
                    "color": [
                        "green" if i == 0 else t.marker.color for i, _ in enumerate(t.x)
                    ]
                }
            }
        )
        if t.name == "Apr_Max"
        else t
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2015-04-21
      相关资源
      最近更新 更多