从数据框创建堆积条形图
Creating stacked bar chart from dataframe
我有一个 table,行中有不同的场景,列中有与它们关联的值
像这样
| Scenario | A | B | C |
|:-----------|-----:|------:|----:|
| Scen1 | 6.5 | 0.125 | 52 |
| Scen2 | 16.5 | 1.125 | 152 |
| Scen3 | 26.5 | 2.125 | 252 |
我想制作堆积条形图similar to this
即我想要三个条(每个场景 Scen1、Scen2、Scen3 一个),并且每个条具有三个部分(代表 A、B、C 的值)
我尝试了以下方法,但无法弄清楚如何将数据帧正确传递给 px.bar
。
import pandas as pd
import plotly.express as px
df = pd.DataFrame()
dict1 = {'A': 6.5, 'B': 0.125, 'C': 52}
series1 = pd.Series(data=dict1, name='Scen1')
df = df.append(series1)
dict2 = {'A': 16.5, 'B': 1.125, 'C': 152}
series2 = pd.Series(data=dict2, name='Scen2')
df = df.append(series2)
dict3 = {'A': 26.5, 'B': 2.125, 'C': 252}
series3 = pd.Series(data=dict3, name='Scen3')
df = df.append(series3)
df.index.name = "Scenario"
fig = px.bar(df, x="Scenario", y=["A","B", "C"], title="Test")
fig.show()
使用DataFrame.melt
预处理数据:
df = df.reset_index().melt('Scenario')
print (df)
Scenario variable value
0 Scen1 A 6.500
1 Scen2 A 16.500
2 Scen3 A 26.500
3 Scen1 B 0.125
4 Scen2 B 1.125
5 Scen3 B 2.125
6 Scen1 C 52.000
7 Scen2 C 152.000
8 Scen3 C 252.000
import plotly.express as px
fig = px.bar(df, x="Scenario", y="value", color="variable", title="Test")
fig.show()
我有一个 table,行中有不同的场景,列中有与它们关联的值
像这样
| Scenario | A | B | C |
|:-----------|-----:|------:|----:|
| Scen1 | 6.5 | 0.125 | 52 |
| Scen2 | 16.5 | 1.125 | 152 |
| Scen3 | 26.5 | 2.125 | 252 |
我想制作堆积条形图similar to this
即我想要三个条(每个场景 Scen1、Scen2、Scen3 一个),并且每个条具有三个部分(代表 A、B、C 的值)
我尝试了以下方法,但无法弄清楚如何将数据帧正确传递给 px.bar
。
import pandas as pd
import plotly.express as px
df = pd.DataFrame()
dict1 = {'A': 6.5, 'B': 0.125, 'C': 52}
series1 = pd.Series(data=dict1, name='Scen1')
df = df.append(series1)
dict2 = {'A': 16.5, 'B': 1.125, 'C': 152}
series2 = pd.Series(data=dict2, name='Scen2')
df = df.append(series2)
dict3 = {'A': 26.5, 'B': 2.125, 'C': 252}
series3 = pd.Series(data=dict3, name='Scen3')
df = df.append(series3)
df.index.name = "Scenario"
fig = px.bar(df, x="Scenario", y=["A","B", "C"], title="Test")
fig.show()
使用DataFrame.melt
预处理数据:
df = df.reset_index().melt('Scenario')
print (df)
Scenario variable value
0 Scen1 A 6.500
1 Scen2 A 16.500
2 Scen3 A 26.500
3 Scen1 B 0.125
4 Scen2 B 1.125
5 Scen3 B 2.125
6 Scen1 C 52.000
7 Scen2 C 152.000
8 Scen3 C 252.000
import plotly.express as px
fig = px.bar(df, x="Scenario", y="value", color="variable", title="Test")
fig.show()