Графика на Python с Matplotlib


Рассмотрим, как визуализировать результаты анализа средствами библиотеки Matplotlib. Наиболее часто для этого применяют модуль matplotlib.pyplot, который предоставляет как функциональный, так и объектный интерфейс. Как правило, первый применяют, если требуется нарисовать один график, а второй - несколько. Общепринято импортировать данный модуль под псевдонимом plt: import matplotlib.pyplot as plt

В демонстрационных целях зададим точки, соответствующие графику логарифма: x = np.linspace(1,20,10) y = np.log(x)

Теперь зададим простейшие настройки:

plt.plot(x,y, label = 'название графика')

plt.title('Заголовок')

plt.xlabel('Подпись оси x')

plt.ylabel('Подпись оси y', rotation=90)

plt.legend()

Img

В первой строке задается тип графика и на вход функции plot передаются точки, здесь же указывается название кривой. Далее:

plt.title - задает название всего рисунка;

plt.xlabel - подпись оси x;

plt.ylabel - подпись оси y, по желанию для поворота можно использовать аргумент rotation;

plt.legend - инициирует отображение названия графика и различных надписей на нем.

При задании тех же параметров для столбцовой диаграммы получается следующий результат:

plt.bar(x,y , label = 'название графика')

plt.title('Заголовок')

plt.xlabel('Подпись оси x')

plt.ylabel('Подпись оси y', rotation=90)

plt.legend()

Img

Подписи и метки на осях

Не очень красиво выглядят метки на оси x, так как выбраны автоматически и не соответствуют значениям x. Чтобы это справить можно задать:

plt.xticks(x, np.round(x,2))

Img

В качестве первого параметра задается положение меток, второго - их наименования. Если задан один параметр, то и положение, и наименования будут заполняться этими значениями:

plt.xticks(x, np.round(x,2))

plt.yticks(y)

Если добавить такие строки, то:

Img

Если бы значения y были более подробные, отсутствие явно заданных наименований могло бы привести к излишней детализации значений и ухудшению внешнего вида графика.

Когда не требуется выводить метки по оси, можно задать пустой список в xticks/yticks:

plt.xticks([])

Img

Границы значений по осям

Также иногда полезно задавать границы отображения графика по осям с помощью plt.xlim/plt.ylim (также вернем метки, чтобы было понятно):

plt.xticks(x, np.round(x,2))

plt.xlim([5,10])

Img

Отобразить дополнительную надпись на полотне

Для этих целей можно воспользоваться таким трюком - добавить пустой график с заданным значением свойства label:

plt.scatter([],[],label='Дополнительная надпись')

Img

Сохранение

Воспользуйтесь функцией savefig:

plt.savefig('pict.png')

Если на одном рисунке несколько графиков

В этом случае используется объектный интерфейс. Распространенный способ его применения выглядит следующим образом:

fiq, ax = plt.subplots(2,3, sharex=True, sharey=True)

С помощью plt.subplots получаем объект рисунка и массив подграфиков, где первое число - количество строк, второе - столбцов, sharex, sharey задают нужно ли разделять ось между подграфиками. Затем в цикле заполняются подграфики:

Img
Img

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

plt.title -> fig.suptitle

plt.xlabel -> ax_i.set_xlabel

plt.xticks -> ax_i.set_xticks, ax_i.set_xticklabels

plt.xlim -> set_xlim

plt.legend -> ax_i.legend

fig.subplots_adjust - используется для задания размеров полеи? между подграфиками. Вынесенные за пределы цикла методы set_xlabel и set_ylabel позволяют задать заголовки осей, начиная с определенных подграфиков.

Для сохранения графиков в файле можно воспользоваться методом savefig объекта рисунка:

fig.savefig('pict.png')

Img