这是对此question的后续行动。
以下面的示例为例:
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
d = {'group 1': [0, 2, 5, 7, 0, 5, 0],
'group 2': [0, 0, 1, 8, 2, 6, 2],
'group 3': [0, 0, 0, 4, 4, 8, 4]}
df = pd.DataFrame(d)
ax = df.plot.barh(stacked=True, figsize=(10,12))
for p in ax.patches:
left, bottom, width, height = p.get_bbox().bounds
ax.annotate(str(width), xy=(left+width/2, bottom+height/2),
ha='center', va='center', size = 12)
plt.legend(bbox_to_anchor=(0, -0.15), loc=3, prop={'size': 14}, frameon=False)
您可以看到注释(当值为0时)如何使图形看起来非常糟糕。
有人对保留非零值的注释如何删除或隐藏0值的注释有任何想法吗?
答案 0 :(得分:1)
我相信您只需要在循环中添加一个if
语句
for p in ax.patches:
left, bottom, width, height = p.get_bbox().bounds
ax.annotate(str(width), xy=(left+width/2, bottom+height/2),
ha='center', va='center', size = 12)
过滤掉width == 0.0
的实例,即
for p in ax.patches:
left, bottom, width, height = p.get_bbox().bounds
if width != 0.0:
ax.annotate(str(width), xy=(left+width/2, bottom+height/2),
ha='center', va='center', size = 12)
这会给你