I have a sample stacked bar char as below. How can i suppress "0" values in the chart
wherever i have 0 i dont want to display the values. Is there any way i can suppress zero
I have below code while displaying data
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)
I have tried below approaches
ID1[ID1 == 0] = np.nan ( to pass nan value but i am getting error
Error: ValueError: cannot convert float NaN to integer
Is there any way i can achieve
and also how can make y axis to display as per data(As per below image i have upto 6 on Y axis. and i use np.arange for this
np.arange(0,6,1)
but in future i may have different values greater than 100 . Without specifying any function like np.arange is there any way i can pass it dynamically to handle yaxis without any range ..?
Since the rectangle patches have already been generated, we can just get the heights and widths from the plot and add texts based on those:
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()