英文:
Python : Pandas Chaining : How to add text to the plot?
问题
抱歉,我无法执行代码。要在条形图上添加文本标签,你可以使用Matplotlib库。下面是在使用Pandas链接时添加标签的示例代码:
(
df
.groupby(['col1', 'col2'], dropna=False)
[['col1', 'col2']]
.size()
.unstack()
.plot(kind='bar', figsize=(8, 8))
)
# 添加标签到条形图
import matplotlib.pyplot as plt
# 假设你的unstacked数据框为df_unstacked
df_unstacked = df.groupby(['col1', 'col2'], dropna=False)[['col1', 'col2']].size().unstack()
# 从unstacked数据框中获取行数和列数
rows, cols = df_unstacked.shape
for i in range(cols):
for j in range(rows):
# 检查数值是否为NaN,如果不是,添加文本标签到条形图
if not pd.isnull(df_unstacked.iloc[j, i]):
plt.text(i, df_unstacked.iloc[j, i], str(df_unstacked.iloc[j, i]), ha='center', va='bottom')
plt.show()
以上代码会在条形图上的每个条形上添加相应的数字标签。
英文:
How to add text/label to a bar plot, when using pandas chaining ? Below is how I'm plotting without the label.
(
df
.groupby(['col1','col2'], dropna=False)
[['col1', 'col2']]
.size()
.unstack()
.plot(kind='bar', figsize = (8,8))
)
The unstacked data frame (right before .plot in the above code) has data as below.
col2 1.0 2.0 3.0 4.0 NaN
col1
1.0 514 1922 7827 18877 1966
2.0 NaN NaN NaN NaN 2018
NaN 21 20 59 99 5570
I would like to have the numbers displayed on top of the bars. Please advice. Thank you.
答案1
得分: 1
你必须获得你链接操作的输出(返回一个 Axes 实例):
ax = (df.groupby(['col1', 'col2'], dropna=False)[['col1', 'col2']]
.size().unstack()
.plot(kind='bar', figsize=(8, 8)))
for bars in ax.containers:
ax.bar_label(bars)
输出:
[![enter image description here][1]][1]
**更新**
> 我正在使用 3.3.2 版本,由于系统限制,无法升级
for rect in ax.patches:
height = rect.get_height()
ax.annotate('{:d}'.format(int(height)),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 3),
textcoords="offset points",
ha='center', va='bottom')
[1]: https://i.stack.imgur.com/CV08j.png
英文:
You have to get the output of your chaining (return an Axes instance):
ax = (df.groupby(['col1', 'col2'], dropna=False)[['col1', 'col2']]
.size().unstack()
.plot(kind='bar', figsize=(8, 8)))
for bars in ax.containers:
ax.bar_label(bars)
Output:
Update
> I'm using 3.3.2 and cannot upgrade due to system restrictions
for rect in ax.patches:
height = rect.get_height()
ax.annotate(r'{:d}'.format(int(height)),
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, 3),
textcoords="offset points",
ha='center', va='bottom')
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论