Jef*_*eff 1 python bar-chart plotly
我有一个数据集如下:
import pandas as pd
data = dict(Pclass=[1,1,2,2,3,3],
Survived = [0,1,0,1,0,1],
CategorySize = [80,136,97,87,372,119] )
Run Code Online (Sandbox Code Playgroud)
我需要在pythonbarchart中创建一个using ,它按Pclass分组。在每组中,我有 2 列和,在 Y 轴上我应该有. 因此,我必须有 6 个条,分为 3 组。plotlySurvived=0Survived=1CategorySize
这是我尝试过的:
import plotly.offline as pyo
import plotly.graph_objects as go
data = [ go.Bar( x = PclassSurvived.Pclass, y = PclassSurvived.CategorySize ) ]
layout = go.Layout(title= 'Pclass-Survived', xaxis = dict(title = 'Pclass'), yaxis = dict(title = 'CategorySize'),barmode='group' )
fig = go.Figure(data = data, layout = layout)
pyo.plot( fig, filename='./Output/Pclass-Survived.html')
Run Code Online (Sandbox Code Playgroud)
但是,这不是我需要的。
Pandas这可以通过'sgroupby和Plotly Express轻松完成。
Pclass您应该按列对数据进行分组Survived,并将求和聚合函数应用于该CategorySize列。
barmode这样,您将获得 6 个组及其合计值,并且借助该属性(通过使用值),您可以轻松地为每个组绘制一对条形图(并排)'group',您可以在文档.
代码:
import pandas as pd
import plotly.express as px
data = pd.DataFrame(
dict(
Pclass=[1, 1, 2, 2, 3, 3],
Survived=[0, 1, 0, 1, 0, 1],
CategorySize=[80, 136, 97, 87, 372, 119],
)
)
Run Code Online (Sandbox Code Playgroud)
现在您对数据进行分组:
import pandas as pd
import plotly.express as px
data = pd.DataFrame(
dict(
Pclass=[1, 1, 2, 2, 3, 3],
Survived=[0, 1, 0, 1, 0, 1],
CategorySize=[80, 136, 97, 87, 372, 119],
)
)
Run Code Online (Sandbox Code Playgroud)
并将Survived列值转换为字符串(因此将其视为离散变量,而不是数字变量):
grouped_df = data.groupby(by=["Pclass", "Survived"], as_index=False).agg(
{"CategorySize": "sum"}
)
Run Code Online (Sandbox Code Playgroud)
现在,您应该:
| P级 | 幸存下来 | 类别大小 | |
|---|---|---|---|
| 0 | 1 | 死了 | 80 |
| 1 | 1 | 幸存下来 | 136 |
| 2 | 2 | 死了 | 97 |
| 3 | 2 | 幸存下来 | 87 |
| 4 | 3 | 死了 | 第372章 |
| 5 | 3 | 幸存下来 | 119 |
最后,可视化您的数据:
grouped_df.Survived = grouped_df.Survived.map({0: "Died", 1: "Survived",})
Run Code Online (Sandbox Code Playgroud)