Plotly Express - 如何绘制单变量堆积条形图

Plotly Express - ho to plot a stacked bar chart of single variable

我有一个这样的数据框

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

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

我该怎么做? 我在文档中看到了几个示例,但其中 none 解决了我的问题 谢谢

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

我要做的是为每个“名称”创建一个跟踪,将 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 and a full description of the available bar chart options here.

有点罗嗦,但您可以为 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()