You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas绘制的条形图条形内部添加Complaint Type列文本?

在条形图的条形内部添加「Complaint Type」文本的实现方法

我来帮你搞定这个需求!要把每个条形对应的「Complaint Type」文本嵌入到条形内部,直接用 pandas 的 plot 方法没办法直接实现,得结合 matplotlib 的底层 API 来手动添加文本。下面是完整的实现代码和说明:

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 构建数据
df1 = dict({
    'Borough': ['BROOKLYN','QUEENS','MANHATTAN','BRONX','STATEN ISLAND','Unspecified'], 
    'Complaint Type': ['Blocked Driveway','Blocked Driveway','Noise - Street/Sidewalk','Blocked Driveway','Illegal Parking','Illegal Parking'], 
    'Count': [28148,31644,20550,12755,4886,1040]
})
df2 = pd.DataFrame(df1)

# 绘制条形图并获取坐标轴对象
ax = df2.plot(
    x="Borough", 
    y="Count", 
    kind='bar', 
    alpha=0.6, 
    color='red', 
    figsize=(7,7), 
    title='Most frequent complaint type in each Borough'
)
plt.xlabel('Borough')
plt.ylabel('Count')

# 遍历每个条形,添加「Complaint Type」文本到内部
for i, patch in enumerate(ax.patches):
    # 获取当前条形对应的投诉类型
    complaint_type = df2['Complaint Type'].iloc[i]
    # 计算文本的位置:条形中心x坐标,条形高度的一半(垂直居中)
    x = patch.get_x() + patch.get_width() / 2
    y = patch.get_height() / 2
    # 添加文本,居中对齐,用白色文字和红色条形形成对比
    ax.text(
        x, 
        y, 
        complaint_type, 
        ha='center', 
        va='center', 
        color='white', 
        fontsize=9
    )

# 显示图形
plt.tight_layout()
plt.show()

代码说明

  • 绘图时我们保存了返回的坐标轴对象 ax,这是后续操作的核心入口;
  • 通过 ax.patches 获取所有条形对象,逐个遍历处理:
    • 用索引从 DataFrame 中匹配对应条形的「Complaint Type」文本;
    • 计算文本位置:水平方向取条形中心,垂直方向取条形高度的一半,确保文本在条形内部居中;
    • 设置白色文本和红色条形形成清晰对比,同时调整字体大小适配条形尺寸;
  • 最后用 plt.tight_layout() 自动调整布局,避免文本和坐标轴元素重叠。

运行这段代码后,每个条形内部就会清晰显示对应的投诉类型啦!

内容的提问来源于stack exchange,提问作者Suryakiran S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:22:46