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()
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()
添加回答
举报