Plotly:如何使用 group by 创建条形图?

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)

但是,这不是我需要的。

Res*_*awi 5

Pandas这可以通过'sgroupbyPlotly 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)

在此输入图像描述