Создание столбчатых диаграмм в Python

#python #charts #matplotlib #bar-chart

#python #Диаграммы #matplotlib #столбчатая диаграмма

Вопрос:

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

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

def webshow(img):
    savefig(img,dpi=500)
    print 'Content-Type: text/htmln'
    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")
 

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

занятый кот
(источник: tumblr.com )

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

Ответ №1:

Во-первых, я бы использовал 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 он просто отобразит значение как есть. Дополнительные сведения см. в документации по этой функции. Обратите внимание, что вы также можете использовать аргумент set_yticklabels функции text для дальнейшего управления форматированием (конечно, эта функция также доступна для оси x.