2015-07-06 2 views
1
import matplotlib.ticker as ticker 
import matplotlib.pyplot as plt 

data = [1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 3, 5] 

ax = plt.axes() 
ax.text(0.25, 3, 'Firts label', rotation=90) 
ax.text(1.25, 3, 'The Second One', rotation=90) 
ax.text(2.25, 3, 'Labes', rotation=90) 
ax.text(3.25, 3, 'Foo', rotation=90) 
ax.text(4.25, 3, 'Bar', rotation=90) 

plt.bar(range(len(data)), data, color='g') 
plt.show() 

enter image description hereAlign в нижней части повернуты текст

У меня есть список меток для каждого бара. Если я создаю функцию, которая принимает данные баров в качестве аргументов, как динамически выровнять метки в верхней части столбца?

+2

Вы смотрели в 'verticalalignment' или' va' ключевое слово? Попробуйте. – Ajean

+1

см. [Это] (http://stackoverflow.com/questions/30228069/how-to-display-the-value-of-the-bar-on-each-bar-with-pyplot-barh/30229062#30229062) (горизонтальные бары, не очень разные) – cphlewis

ответ

2

Вы можете получить bars с участка, а затем получить высоту каждого бара. Можно также использовать значение данных напрямую, но это менее гибкое (например, если используются многоярусные баре):

enter image description here

import matplotlib.ticker as ticker 
import matplotlib.pyplot as plt 

data = [1, 1, 1, 2, 2, 1, 1, 1, 2, 3, 3, 5] 

ax = plt.axes() 
bars = ax.bar(range(len(data)), data, color='g') 

labels = 'Firts label', 'The Second One', 'Labes', 'Foo', 'Bar', 'Last Label' 

for label, rect in zip(labels, bars): 
    height = rect.get_height() 
    ax.text(rect.get_x()+rect.get_width()/2., height+.1, label, 
     ha='center', va='bottom', rotation=90)  

plt.show() 
Смежные вопросы