Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果值为0,则隐藏matplot注释_Python_Matplotlib - Fatal编程技术网

Python 如果值为0,则隐藏matplot注释

Python 如果值为0,则隐藏matplot注释,python,matplotlib,Python,Matplotlib,这是对此的后续行动 以下面的例子为例: 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(

这是对此的后续行动

以下面的例子为例:

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值的注释,同时保留非零值的注释吗?

我认为您只需要在循环中添加一个
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)
筛选出宽度=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)
这会给你