我正在尝试使用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)
直方图基本相同。
谢谢您的帮助!
答案 0 :(得分:3)
px.histogram似乎没有text属性。因此,如果您愿意在制作图之前进行任何装仓,则可以使用px.Bar。通常,您使用px.Bar(... text = <something>)
将文本应用于条形图。但这会为您提供所有数据子类别的文本描述的结果。但是,由于我们知道px.Bar
按照源的组织顺序添加数据和注释,因此我们可以简单地将文本更新为使用fig.data[-1].text = sums
应用的 last 子类别。剩下的唯一挑战是对某些数据进行处理以检索正确的总和。
情节:
使用数据示例完成代码:
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()
答案 1 :(得分:0)
如果您的第一个图形带有图形对象库,则可以尝试:
# 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',
)])