Проблема с вашим кодом заключается в том, что вы вычитаете значение x, то есть 47000 (это больше, чем наименьшее значение), просто уменьшите это число до 47 (или любое число больше, чем наименьшее значение), и оно будет работать. Также измените цвет текста на черный, если у вас белый фон
% %matplotlib inline
import matplotlib.pyplot as plt
top_15.plot(kind='barh', figsize=(10, 10), color='steelblue')
plt.xlabel('Number of Immigrants')
plt.title('Top 15 Conuntries Contributing to the Immigration to Canada between 1980 - 2013')
# annotate value labels to each country
for index, value in enumerate(top_15.loc[:,'Total']):
label = format(int(value), ',') # format int with commas
# place text at the end of bar (subtracting 47000 from x, and 0.1 from y to make it fit within the bar)
plt.annotate(label, xy=(value - 47, index - 0.10), color='black')
plt.show()
Альтернативный подход:
% matplotlib inline
import matplotlib.pyplot as plt
ax = df.plot(kind='barh', figsize=(15,10),color="steelblue", fontsize=13);
ax.set_title("Top 15 Conuntries Contributing to the Immigration to Canada between 1980 - 2013", fontsize=18)
ax.set_xlabel("Number of Immigrants", fontsize=18);
for i in ax.patches:
# get_width pulls left or right; get_y pushes up or down
ax.text(i.get_width()+.1, i.get_y()+.31, \
str(round((i.get_width()), 2)), fontsize=10, color='black')