Как определить порядок баров на гистограмме matplotlib
Предположим, мы читаем некоторые данные в фрейм данных pandas:
data1 = pd.read_csv("data.csv", "t")
содержание выглядит следующим образом:
а затем определите функцию, которая должна дать нам горизонтальную гистограмму, где длины баров представляют значения, а бары помечены клавишами.
def barchart(data, labels):
pos = arange(len(data))+.5 # the bar centers on the y axis
barh(pos, data, align='center', height=0.25)
yticks(pos, labels)
затем мы вызываем функцию plot следующим образом:
barchart(data1["val"], data1["key"])
что дает нам следующий заговор:
теперь, что определяет порядок столбцов?
Предположим, нам нужны бары в специальном порядке, скажем [C, A, D, F, E, B]
, как мы можем осуществить это?
2 ответов
Я изменил оригинальную версию barchart. Чтобы указать порядок баров, я использую набор индексов через столбец ii:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def barchart(data, labels):
pos = np.arange(len(data)) + 0.5 # the bar centers on the y axis
plt.barh(pos, data.sort_index(), align='center', height=0.25)
plt.yticks(pos, labels.sort_index())
data1 = pd.DataFrame({'key': list('ABCDE'), 'val': np.random.randn(5)})
new_keys = list('EDACB')
data1['ii'] = [new_keys.index(x) for x in data1.key]
data1 = data1.set_index('ii')
barchart(data1["val"], data1["key"])
plt.show()
если вы непосредственно читаете ключ как индекс с
In [12]: df = pd.read_csv('data.csv', '\t', index_col='key')
In [13]: df
Out[13]:
val
key
A 0.1
B 0.4
C 0.3
D 0.5
E 0.2
можно использовать ix
чтобы получить индекс в другом порядке и построить его с помощью df.plot
:
In [14]: df.ix[list('CADFEB')].plot(kind='barh')
Out[14]: <matplotlib.axes._subplots.AxesSubplot at 0x530fa90>
(обратите внимание, что F не указан в данных, но вы дали его в качестве примера)