Python-以图形分组的条形图,其中包含五个Pandas的五个最高值,dataframe列

c9qzyr3d  于 2023-02-07  发布在  Python
关注(0)|答案(1)|浏览(85)

辐射剂量模拟给出了[以下器官剂量:][1]
我想使用Python - Plotly制作一个分组条形图,其中包含每个年龄组列“0”、“1”、“5”、“10”和“15”的五个最高器官剂量值。
X轴应显示每个年龄列中获得最高剂量的五个器官。
我从“0”年龄组的五个最大值开始,并制作了一个条形图:

import pandas as pd
 import plotl.express as px

 df = pd.read_csv('data_org_dos.csv')
 data = df.set_index('Organ')['0'].nlargest(5)
 fig = px.bar(data)
 fig.show()

如何制作一个分组条形图,将所有年龄“0”、“1”、“5”、“10”和“15”显示在同一个图表中?
按照@Timeless的答案,我可以更改代码来生成我想要的分组条形图:

import pandas as pd
import plotly.graph_objs as go

df = pd.read_csv("data_org_dos.csv")
labels = df.columns.map(lambda x: "Age: "+ x)[1:]

fig = go.Figure() 
 
for idx, age in enumerate(labels):
    data = df.set_index('Organ')[age.split()[-1]].nlargest(5).reset_index()
    fig.add_trace(go.Bar(x=data['Organ'], y=data[age.split()[-1]], name=age))

    
fig.update_xaxes(title_text='Organ')
fig.update_yaxes(title_text='E [mSv]')   
fig.update_layout(
    font=dict(
        size=18
    )
)

fig.show()
[ see image link][2]

  [1]: https://www.dropbox.com/s/qux9v9ubp5cskl6/data_org_dos.csv?dl=0
  [2]: https://i.stack.imgur.com/iiEAt.png
bd1hkmkf

bd1hkmkf1#

您需要nlargestgo.Bar的 * 组合 *:

import pandas as pd
import plotly.subplots as sp
import plotly.graph_objs as go

df = pd.read_csv("Downloads/data_org_dos.csv")

labels = df.columns.map(lambda x: "Age: "+ x)[1:]
fig = sp.make_subplots(rows=len(labels), cols=1)

for idx, age in enumerate(labels):
    data = df.set_index('Organ')[age.split()[-1]].nlargest(5).reset_index()
    fig.add_trace(go.Bar(x=data['Organ'], y=data[age.split()[-1]], name=age), row=idx+1, col=1)
    
fig.update_layout(title="StackOverflow: OrganDoses", barmode="group")

fig.show()

输出:

相关问题