如何在堆叠条形图显示中抑制零
How to suppress zero in stacked bar graph display
我有一个示例堆叠条形字符,如下所示。我如何抑制图表中的“0”值
只要我有 0,我就不想显示这些值。有什么办法可以抑制零
我在显示数据时有以下代码
for xpos, ypos, yval in zip(TABLE_NAMES, ID1/2, ID1):
plt.text(xpos, ypos, yval, ha="center", va="center",fontsize=20)
for xpos, ypos, yval in zip(TABLE_NAMES, ID1+ID2/2, ID2):
plt.text(xpos, ypos, yval, ha="center", va="center",fontsize=20)
我试过以下方法
ID1[ID1 == 0] = np.nan ( to pass nan value but i am getting error
Error: ValueError: cannot convert float NaN to integer
有什么办法可以实现
以及如何使 y 轴根据数据显示(如下图所示,我在 Y 轴上最多有 6 个。我为此使用 np.arange
np.arange(0,6,1)
但将来 i 可能有大于 100 的不同值。没有指定像 np.arange 这样的任何函数,有什么方法可以动态传递它来处理没有任何范围的 yaxis ..?
由于矩形补丁已经生成,我们可以从绘图中获取高度和宽度并根据这些添加文本:
In [164]: df
Out[164]:
a b c d
0 0.807540 0.719843 0.291329 0.928670
1 0.449082 0.000000 0.575919 0.299698
2 0.703734 0.626004 0.582303 0.243273
3 0.363013 0.539557 0.000000 0.743613
4 0.185610 0.526161 0.795284 0.929223
5 0.000000 0.323683 0.966577 0.259640
6 0.000000 0.386281 0.000000 0.000000
7 0.500604 0.131910 0.413131 0.936908
8 0.992779 0.672049 0.108021 0.558684
9 0.797385 0.199847 0.329550 0.605690
In [165]:
from matplotlib.patches import Rectangle
df.plot.bar(stacked=True)
ax = plt.gca()
for p in ax.get_children()[:-1]: # skip the last patch as it is the background
if isinstance(p, Rectangle):
x, y = p.get_xy()
w, h = p.get_width(), p.get_height()
if h > 0: # anything that have a height of 0 will not be annotated
ax.text(x + 0.5 * w, y + 0.5 * h, '%0.2f'%h, va='center', ha='center')
plt.show()
我有一个示例堆叠条形字符,如下所示。我如何抑制图表中的“0”值
只要我有 0,我就不想显示这些值。有什么办法可以抑制零
我在显示数据时有以下代码
for xpos, ypos, yval in zip(TABLE_NAMES, ID1/2, ID1):
plt.text(xpos, ypos, yval, ha="center", va="center",fontsize=20)
for xpos, ypos, yval in zip(TABLE_NAMES, ID1+ID2/2, ID2):
plt.text(xpos, ypos, yval, ha="center", va="center",fontsize=20)
我试过以下方法
ID1[ID1 == 0] = np.nan ( to pass nan value but i am getting error
Error: ValueError: cannot convert float NaN to integer
有什么办法可以实现
以及如何使 y 轴根据数据显示(如下图所示,我在 Y 轴上最多有 6 个。我为此使用 np.arange
np.arange(0,6,1)
但将来 i 可能有大于 100 的不同值。没有指定像 np.arange 这样的任何函数,有什么方法可以动态传递它来处理没有任何范围的 yaxis ..?
由于矩形补丁已经生成,我们可以从绘图中获取高度和宽度并根据这些添加文本:
In [164]: df
Out[164]:
a b c d
0 0.807540 0.719843 0.291329 0.928670
1 0.449082 0.000000 0.575919 0.299698
2 0.703734 0.626004 0.582303 0.243273
3 0.363013 0.539557 0.000000 0.743613
4 0.185610 0.526161 0.795284 0.929223
5 0.000000 0.323683 0.966577 0.259640
6 0.000000 0.386281 0.000000 0.000000
7 0.500604 0.131910 0.413131 0.936908
8 0.992779 0.672049 0.108021 0.558684
9 0.797385 0.199847 0.329550 0.605690
In [165]:
from matplotlib.patches import Rectangle
df.plot.bar(stacked=True)
ax = plt.gca()
for p in ax.get_children()[:-1]: # skip the last patch as it is the background
if isinstance(p, Rectangle):
x, y = p.get_xy()
w, h = p.get_width(), p.get_height()
if h > 0: # anything that have a height of 0 will not be annotated
ax.text(x + 0.5 * w, y + 0.5 * h, '%0.2f'%h, va='center', ha='center')
plt.show()