我想用Plotly制作动态图。我想绘制一个已经汇总的数据的计数(使用groupby).我想按颜色(甚至按列)来分面绘制。问题是,我希望每个条形图上都能显示数值。使用直方图,我得到了平滑的条形图,但我找不到如何显示计数。
用条形图,我可以显示计数,但我没有得到平滑的条形图,而且计数不是显示整个条形图,而是显示组成该条形图的每个案例。
以下是我的条形图代码
val = pd.DataFrame(data2.groupby(["program", "gender"])["experience"].value_counts())
px.bar(x=val.index.get_level_values(0), y=val, color=val.index.get_level_values(1), barmode="group", text=val)
直方图基本也是如此。
谢谢您的帮助!
px.histogram 似乎没有文本属性。所以,如果你愿意在制作情节之前进行任何分选,我会使用 px.Bar. 通常情况下,您可以使用以下方法将文本应用到条形图中 px.Bar(... text = <something>)
. 但是这样一来,你的数据的所有子类都会得到你所描述的带有文本的结果。但既然我们知道 px.Bar
按照源的组织顺序添加数据和注释,我们可以简单地将文本更新为 最后的 子类使用 fig.data[-1].text = sums
. .唯一的挑战是一些数据混杂,以检索正确的总和。
Plot:
完整的代码与数据示例。
import plotly.graph_objects as go
import plotly.express as px
import pandas as pd
# data
df = pd.DataFrame({'x':['a', 'b', 'c', 'd'],
'y1':[1, 4, 9, 16],
'y2':[1, 4, 9, 16],
'y3':[6, 8, 4.5, 8]})
df = df.set_index('x')
# calculations
# column sums for transposed dataframe
sums= []
for col in df.T:
sums.append(df.T[col].sum())
# change dataframe format from wide to long for input to plotly express
df = df.reset_index()
df = pd.melt(df, id_vars = ['x'], value_vars = df.columns[1:])
fig = px.bar(df, x='x', y='value', color='variable')
fig.data[-1].text = sums
fig.update_traces(textposition='inside')
fig.show()
如果你的第一张图是用图对象librairy,你可以尝试:
# Use textposition='auto' for direct text
fig=go.Figure(data[go.Bar(x=val.index.get_level_values(0),
y=val, color=val.index.get_level_values(1),
barmode="group", text=val, textposition='auto',
)])