为了账号安全,请及时绑定邮箱和手机立即绑定

Plotly 合并两个动画条形图

Plotly 合并两个动画条形图

www说 2023-10-11 16:23:49
我想创建一个分组条形图,显示每组的中位数和平均值。我还使用动画帧来显示每个中位数和均值如何根据 ubi 数量而变化。我想对这些条形图进行分组,以便它显示每个组的中位数和平均值及其变化方式。这是我的代码,但我不知道如何对它们进行分组。import pandas as pdimport plotly.express as pxsummary_med = pd.read_csv('https://github.com/ngpsu22/indigenous-peoples-day/raw/main/native_medians_means')fig = px.bar(summary_med, x = 'race', y='med_resources_per_person',         animation_frame='monthly_ubi', range_y=[0,25_000],         labels={                 "med_resources_per_person": "Median resources per person",                 "race": "Race",                 "monthly_ubi": "Monthly UBI",                 "native": "Native",                 "non_native": "Non-native"             },            title="Tax funded UBI and median resources per person",          color='race',          text='med_resources_per_person',         height=900, width=800,         color_discrete_map={'native': '#5886a5',                             'non_native': '#5886a5'})fig.update_traces(texttemplate='$%{text}')fig.update_layout(showlegend=False, yaxis_tickprefix='$')fig.show()
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我不确定这是否是您所要求的


import pandas as pd

import plotly.express as px


url = 'https://github.com/ngpsu22/indigenous-peoples-day/raw/main/native_medians_means'

df = pd.read_csv(url)


# wide to long

df = pd.melt(df,

        id_vars=["monthly_ubi", "race"],

        value_vars=['med_resources_per_person',

                    'mean_resources_per_person'],

        var_name="resource",

             

        value_name="y")



# Format text

diz_resource = {"med_resources_per_person": "Median",

                "mean_resources_per_person": "Mean"}

diz_race = {"native": "Native",

            "non_native": "Non-native"}


df["resource"] = df["resource"].map(diz_resource)

df["race"] =  df["race"].map(diz_race)


# Range max

range_max = df["y"].max() * 1.2


# Plot

fig = px.bar(df, 

       x='race',

       y="y",

       color="resource",

       barmode='group',

       animation_frame='monthly_ubi',

       text='y',

       height=900, width=800,

       labels={"race": "Race",

               "monthly_ubi": "Monthly UBI",

               "y": "Resource Per Person"

             },

       title="Tax funded UBI and median resources per person",

       range_y=[0, range_max]

    )

fig.update_traces(texttemplate='$ %{text}')

fig.update_layout(title_x=0.5,

#                   showlegend=False,

                  yaxis_tickprefix='$')

fig.show()

https://img1.sycdn.imooc.com/65265bda0001022206520736.jpg

查看完整回答
反对 回复 2023-10-11
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

这是一个不修改数据框的解决方案。但到目前为止,我还没有找到一个好的方法来显示没有图例的变量名称(中位数、平均值)。我还修改了颜色以显示差异,但如果您愿意,可以将颜色更改为相同。


代码是:


import pandas as pd 

import plotly.express as px



summary_med = pd.read_csv('https://github.com/ngpsu22/indigenous-peoples-day/raw/main/native_medians_means')


fig = px.bar(summary_med, x="race", y=["med_resources_per_person","mean_resources_per_person"],

             # color='race', 

             animation_frame='monthly_ubi', 

             range_y=[0,50_000],

             barmode='group', # make it side by side 

             # height=400

              labels={

                 "med_resources_per_person": "Median",

                 "mean_resources_per_person":"Mean",

                 "race": "Race",

                 "monthly_ubi": "Monthly UBI",

                 "native": "Native",

                 "non_native": "Non-native"

             },

            title="Tax funded UBI and median resources per person", 


            height=900, width=800,

            color_discrete_map={'med_resources_per_person': '#5886a5','mean_resources_per_person': '#58a577'}


            ) 

fig.update_traces(texttemplate='%{y}') 

fig.update_layout(showlegend=True, yaxis_tickprefix='$') 

fig.show()

查看完整回答
反对 回复 2023-10-11
  • 2 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信