合并两个动画条形图

时间:2020-10-06 20:11:45

标签: python pandas plotly

我想创建一个分组的条形图,以显示每个组的中位数和均值。我还使用动画帧来显示每个中位数和均值如何根据ubi量变化。

我想对这些条形图进行分组,以便显示每个组的中位数和均值以及其变化方式。

这是我的代码,但是我在如何将它们分组方面陷入困境。

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',
         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 个答案:

答案 0 :(得分: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()

enter image description here

答案 1 :(得分:1)

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

代码为:

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()

enter image description here