如何在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
相关产品推荐
相关产品推荐

