Создание гистограмм в Python - PullRequest
       15

Создание гистограмм в Python

4 голосов
/ 24 октября 2011

У меня есть пара проблем с гистограммой, которую я пытаюсь создать в python. Мой код для диаграммы выглядит так:

import matplotlib
matplotlib.use('Agg')
from pylab import *
import calendar

def webshow(img):
    savefig(img,dpi=500)
    print 'Content-Type: text/html\n'
    print '<img width="800" height="400" src="'+img+'" />'

genres = []
n = 0
for c in sorted_list: 
    genres.append(sorted_list[n][0])
    n += 1

grosses = []
a = 0
for c in sorted_list:
    grosses.append(sorted_list[a][1])
    a += 1

clf()
bar(arange(len(grosses)),grosses)
xticks( arange(len(genres)),genres, rotation=80)
webshow("barchart.png")

Мой график выглядит так:

занятой кот http://28.media.tumblr.com/tumblr_ltk9v6xShD1r5te58o1_500.png

В основном моя главная проблема заключается в том, что значения указаны в десятичном виде с научными обозначениями Я хочу представить их миллионами, если это возможно. Кроме того, я не уверен, как сделать так, чтобы жанры не обрезались снизу. Спасибо за любую помощь!

1 Ответ

4 голосов
/ 24 октября 2011

Прежде всего, я бы использовал объект figure для работы: это облегчает построение графика по вашему вкусу. Чтобы построить ваш график, нужно сделать следующее:

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)          # Remark 1
ax = fig.add_subplot(111)
ax.bar(arange(len(grosses)), grosses)
ax.ticklabel_format(style='plain')       # Remark 2
ax.set_xticks(arange(len(genres)))
ax.set_xticklabels(genres, rotation=80)
savefig('barchart.png', dpi=500)

Вместе со следующими замечаниями:

  1. Это регулирует размер вашего изображения, в этом случае он увеличивает нижнюю часть, чтобы иметь возможность соответствовать вашим этикеткам. В большинстве случаев вы примерно знаете данные, которые собираетесь ввести, так что этого должно быть достаточно. Если вы используете matplotlib версии 1.1 или выше, вы можете использовать функцию tight_layout, чтобы сделать это автоматически для вас. В качестве альтернативы можно самостоятельно рассчитать необходимый размер на основе ограничивающих рамок всех меток осей, как показано здесь , но для этого требуется средство визуализации, чтобы можно было определить размеры всех меток.
  2. Указав формат метки (используя sci или plain), вы можете изменить отображение значений. При использовании plain, оно будет отображать значение как есть. См. документы на эту функцию для получения дополнительной информации. Обратите внимание, что вы также можете использовать аргумент text функции set_yticklabels для дальнейшего управления форматированием (конечно, эта функция также доступна для оси x.
...