【问题标题】:Plotly Express - ho to plot a stacked bar chart of single variablePlotly Express - 如何绘制单个变量的堆积条形图
【发布时间】:2021-12-30 19:11:01
【问题描述】:

我有一个这样的数据框

df = pd.DataFrame({'name':['a', 'b', 'c', 'd', 'e'], 'value':[54.2, 53.239, 43.352, 36.442, -12.487]})
df

我想绘制一个简单的堆积条形图,如下图所示 plotly.express

我该怎么做? 我在文档中看到了几个例子,但没有一个能解决我的问题 谢谢

【问题讨论】:

    标签: python plotly stacked-chart


    【解决方案1】:

    这有点罗嗦,但您可以为 x 轴设置一个值,在本例中为零。然后你只需要调整你的维度、标签和范围。

    import pandas as pd
    import plotly.express as px
    df = pd.DataFrame({'name':['a', 'b', 'c', 'd', 'e'], 'value':[54.2, 53.239, 43.352, 36.442, -12.487]})
    
    
    df['x'] = 0
    
    fig = px.bar(df, x='x', y='value',color='name', width=500, height=1000)
    
    fig.update_xaxes(showticklabels=False, title=None)
    fig.update_yaxes(range=[-50,200])
    fig.update_traces(width=.3)
    fig.show()
    

    【讨论】:

      【解决方案2】:

      条形图曾经只有一列?对于条形图来说,这似乎是一个奇怪的用例,但是...

      我要做的是为每个“名称”创建一个跟踪,将 df 过滤为 trace_df=df[df['name']==name],然后为每一个创建一个 Bar,如下所示:

      import plotly.graph_objects as go
      
      trace_dfs = [df[df['name']==name] for name in df['name']]
      bars = [
          go.Bar(
              name=name,
              x=['constant' for _ in trace_frame['value']],
              y=trace_frame['value'],
          )
          for trace_frame in trace_dfs
      ]
      fig = go.Figure(
          data=bars,
          barmode='stack'
      )
      

      当然,这不是plotly_express,而是核心plotly,它允许更多的控制。如果您想要不同值的多个堆叠条,则需要单独的标签和单独的 x 和 y 值,而不是您描述的两列 DF。还有更多示例here 和可用条形图选项的完整描述here

      【讨论】:

        猜你喜欢
        • 2021-10-27
        • 2019-08-09
        • 2018-06-05
        • 2015-09-28
        • 2012-09-17
        • 2021-12-27
        • 2021-10-07
        • 1970-01-01
        相关资源
        最近更新 更多