我想创建一个分组的条形图,以显示每个组的中位数和均值。我还使用动画帧来显示每个中位数和均值如何根据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()
答案 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()
答案 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()