2016-01-05 7 views
0

Я пытаюсь построить гистограмму из словаря для Например:Как использовать Python и Matplotlib настроить столбчатую диаграмму,

Dic = OrderedDict([('PROFESSIONAL_SERVICES', 621), ('WEB_SEARCH', 381), ('REMOTE_ACCESS', 160), ('Microsoft Category', 141), ('INTERNET_SERVICES', 62)]) 

Я хочу, чтобы получить гистограмму, как в следующем скриншоте:

bar chart sample

Вот код, который я использую до сих пор:

import matplotlib.pyplot as plt 
from Processesing import dataProcess 

def chartmak (dic) : 
    D={} 
    D=dic 
    plt.barh(range(len(D)), D.values(),align='center',color="#add8e6") 
    plt.xticks(D.values, D.keys()) 
    plt.gca().invert_yaxis() 
    plt.show() 

NB: Я вызываю эту функцию из другого файла .py

Любая идея, если можно получить гистограмму, такую ​​как диаграмма на скриншоте?

ответ

1

Другое решение ...

import matplotlib.pyplot as plt 
from collections import OrderedDict 

def chartmak (dic) : 
    plt.barh(range(len(dic)), dic.values(), 0.95, align='center', color="lightskyblue") 
    plt.yticks(range(len(dic)), ["{} GB".format(v) for v in dic.values()]) 
    for index, label in enumerate(dic.keys()): 
     plt.text(10, index, label, ha='left',va='center') 
    plt.gca().invert_yaxis() 
    plt.show() 

Dic = OrderedDict([('PROFESSIONAL_SERVICES', 621), ('WEB_SEARCH', 381), ('REMOTE_ACCESS', 160), ('Microsoft Category', 141), ('INTERNET_SERVICES', 62)]) 
chartmak(Dic) 

enter image description here

4

Возможно, это поможет вам начать работу. Вы можете использовать annotate для добавления текстовых меток в указанной точке (в координатах данных) и явно установить метки y-tick. Вы также можете отключить границу «шипы» и удалить отметки, чтобы ближе ознакомиться с изображением, которое вы предоставляете.

from collections import OrderedDict 
import matplotlib.pyplot as plt 

Dic = OrderedDict([('PROFESSIONAL_SERVICES', 621), ('WEB_SEARCH', 381), ('REMOTE_ACCESS', 160), ('Microsoft Category', 141), ('INTERNET_SERVICES', 62)]) 

fig, ax = plt.subplots() 
n = len(Dic) 
ax.barh(range(n), Dic.values(), align='center', fc='#80d0f1', ec='w') 
ax.set_yticks(range(n)) 
ax.set_yticklabels(['{:3d} GB'.format(e) for e in Dic.values()], color='gray') 
ax.tick_params(pad=10) 
for i, (label, val) in enumerate(Dic.items()): 
    ax.annotate(label.title(), xy=(10, i), fontsize=12, va='center') 
for spine in ('top', 'right', 'bottom', 'left'): 
    ax.spines[spine].set_visible(False) 
ax.xaxis.set_ticks([]) 
ax.yaxis.set_tick_params(length=0) 
plt.show() 

enter image description here

+0

Спасибо за ответ это выглядеть так же, как на скриншоте. вы знаете, где я могу найти учебник о matplotlib? спасибо –

+0

Многие рекомендуют [Галерея Matplotlib] (http://matplotlib.org/gallery.html) - выберите тот, который немного похож на то, что вы хотите, и измените его код. Также есть небольшая серия примеров Matplotlib на [этом сайте] (http://scipython.com/book/chapter-7-matplotlib/examples/). – xnx

Смежные вопросы