Использование библиотеки Matplotlib. Как рисовать гистограммы

Немного рекламы

Для построения гистограмм (диаграмм в виде набора столбиков) в Matplotlib используются функция bar и barh, которые строят вертикальные или горизонтальные гистограммы соответственно. Эти функции, как и другие функции рисования, импортируются из модуля pylab. Функции bar и barh имеют множество необязательных параметров с дополнительными настройками, мы в данной статье мы рассмотрим только наиболее часто используемые возможности для настройки внешнего вида гистограмм.

Функции bar и barh имеют два обязательных параметра:

  • Список координат расположения столбиков по оси X для bar или по оси Y для barh.
  • Значения, задающие высоту (длину) столбиков.

Длины этих двух списков должны быть равны.

Простейший пример может выглядеть так:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.bar (xdata, ydata)
    pylab.show()

После запуска программы мы увидим график:

Или аналогично для функции barh:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.barh (xdata, ydata)
    pylab.show()

Как видно из примеров, по умолчанию первый список задает координаты левой границы столбиков для функции bar и нижней границы для barh. Это поведение можно изменить с помощью именованного параметра align, который может принимать строковые значения 'edge', что соответствует значению по умолчанию, или 'center', в этом случае в первом списке задаются координаты не границ, а центров столбиков. Изменим первый пример и посмотрим, что из этого получится:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.bar (xdata, ydata, align='center')
    pylab.show()

Аналогично себя ведет и функция barh.

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

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 0.1, 0.2, 0.4, 0.5, 0.8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.bar (xdata, ydata, align='center')
    pylab.show()

Ширину столбиков можно задавать с помощью параметра width, который может быть целым числом (в этом случае все столбики будут иметь одинаковую ширину) или списком (тогда для каждого столбика можно задать свою ширину). Давайте для начала сделаем так, чтобы столбики примыкали друг к другу, т.е. их ширина должна равняться расстоянию между ними:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 0.1, 0.2, 0.4, 0.5, 0.8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.bar (xdata, ydata, align='center', width=0.1)
    pylab.show()

И посмотрим, как использовать параметр width, когда он задается в виде списка:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]
    width = [0.05, 0.1, 0.2, 0.4, 0.3, 0.05]

    pylab.bar (xdata, ydata, align='center', width=width)
    pylab.show()

В данном примере ширины заданы таким образом, чтобы они были пропорциональны отображаемому значению.

Чтобы изменить цвет столбиков, используется именованный параметр color, он может задавать единственное значение цвета в виде строки или быть списком, который задает цвет для каждого столбика отдельно. О том, как задаются цвета в Matplotlib, вы можете прочитать, например, .

Следующий пример показывает, как установить цвет для всех столбиков:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]

    pylab.bar (xdata, ydata, align='center', color='green')
    pylab.show()

Следующий пример устанавливает для каждого столбика свой цвет:

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]
    colors = ['red', 'orange', 'yellow', 'green', 'blue', 'violet']

    pylab.bar (xdata, ydata, align='center', color=colors)
    pylab.show()

Вы можете обратить внимание, что столбики имеют по умолчанию черную окантовку. Часто это устраивает, но вы можете изменить цвет обводящей линии с помощью именованного параметра edgecolor, который работает точно так же, как и параметр color. Следующий пример устанавливает для окантовки те же самые цвета, которые используются для заливки столбиков.

# -*- coding: UTF-8 -*-

import pylab


if __name__ == '__main__':
    xdata = [0, 1, 2, 4, 5, 8]
    ydata = [0.1, 0.2, 0.4, 0.8, 0.6, 0.1]
    colors = ['red', 'orange', 'yellow', 'green', 'blue', 'violet']

    pylab.bar (xdata, ydata, align='center', color=colors, edgecolor=colors)
    pylab.show()

Мы рассмотрели основные возможности для построения гистограмм, за кадром остался вопрос отображения границ погрешностей данных, но это тема для отдельной статьи.

Другие статьи про Matplotlib

Немного рекламы

Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
4.5 stars

Рейтинг 4.3/5. Всего 9 голос(а, ов)



True 04.07.2016 - 17:01

Очень удобная справка. СПАСИБО!


Подписаться на комментарии
Автор:
Тема:
 Ваш комментарий
 
 
Введите код 958