python - 在堆积条形图中显示每个部分的边界
问题描述
有一个像这样的DataFrame:
data= {"A":[10,9], "B":[4,3],"C":[0,4]}
df= pd.DataFrame(data=data, index= ["Jan", "Feb"])
看起来像:
A B C
Jan 10 4 0
Feb 9 3 4
我用堆叠的条形构建了一个情节。(图片在最后)
ax = df.plot(kind="bar",stacked=True,figsize=(16,9))
for c in ax.containers:
ax.bar_label(c, label_type='center')
每列都有一个不应超过的边界值。
borders = {"A": 8, "B":4, "C": 3}
现在我想在图中显示边界,但是为整个图形建立一条恒定线是不够的。每个酒吧都需要自己的边界呈现。
解决方案
您可以使用 遍历df
行pandas.DataFrame.iterrows()
,因此您可以查看每个条形并跟踪三条红线,每列一条。
高度:
- 第一条红线仅取决于
'A'
边框,因此每个条的高度始终相同 - 第二条红线取决于实际
'A'
值加上'B'
边框,因此每个条的高度都是可变的 - 第三条红线取决于实际
'A' + 'B'
值加上'C'
边框,因此每个条的高度都是可变的
我使用k
计数器在酒吧之间移动。
k = 0
for i, _ in df.iterrows():
ax.plot([k - 0.25, k + 0.25], [borders['A'], borders['A']], 'r')
ax.plot([k - 0.25, k + 0.25], [borders['B'] + df.loc[i, 'A'], borders['B'] + df.loc[i, 'A']], 'r')
ax.plot([k - 0.25, k + 0.25], [borders['C'] + df.loc[i, 'A'] + df.loc[i, 'B'], borders['C'] + df.loc[i, 'A'] + df.loc[i, 'B']], 'r')
k += 1
推荐阅读
- angular - 单击按钮时以 dd-MM-yyyy 格式以角度 8 递增和递减日期
- html - 在控制台中打印,但不在页面中?
- deep-learning - Huggingface 语言建模停留在数据读取阶段
- javascript - 更改值时重新渲染表单中的antd Select组件
- kotlin - 如何在 Hashmaps Kotlin 中允许重复键?
- java - 你可以使用房间而不使用 LiveData 对象吗?
- python - 如何获取tkinter.Text Widget中某个区域的字体颜色?
- c# - 使用 .Net ADOMD - 证书指纹方法连接到 Azure AS 模型
- python - 与一个 lat lon 相比,使用 Haversine 函数遍历 lat lon
- angular - 使用隐藏的排名列对primeng表的可见列进行排序