Найти тему
Властелин машин

Построение графиков с Python

Оглавление

Python имеет очень гибкие возможности по рисованию различных картинок и графиков (простых линий, связывающих точки, графиков плотности и рассеяния, гистограмм, столбчатых диаграмм и более сложных конструкций, включая трехмерные фигуры). Основными библиотеками для этого являются Pandas, Matplotlib, Seaborn.

Построение простых линейных графиков

Допустим в вашем распоряжении таблица показателей дохода в разные промежутки времени:

-2

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

  1. с использованием встроенных возможностей Pandas - df.plot(kind='line')
  2. посредством Matplotlib (plt - псевдоним matplotlib.pyplot ) - plt.plot(df.index, df.income)
  3. посредством Seaborn (sns - псевдоним) - sns.lineplot(x=df.index, y=df.income)

График с незначительными отличиями будет иметь следующий вид:

-3

Построение диаграмм рассеяния

Для указанного ниже набора точек построим диаграмму рассеяния:

-4

Для этого можно опять пойти тремя путями (перечислю в том же порядке):

  1. df.plot(kind='scatter', x='x',y='y')
  2. plt.scatter(df['x'], df['y'])
  3. sns.scatterplot(df.iloc[:, 0], df.iloc[:, 1])

-5

Обратите внимание на стиль использования возможностей каждой из библиотек. Визуализация в Pandas производится посредством вызова метода plot объекта, которому требуется указать лишь названия используемых осей, а также вид графика. В то же время визуализация в других библиотеках осуществляется посредством вызова функций отображения различного вида графиков (у каждого свое название) и заданием последовательностей данных (а не только названий осей, как в Pandas).

Отмечу, что данные графики можно построить и с помощью plot, однако scatter предоставляет гораздо больше возможностей по форматированию отдельных точек (размер, цвет заливки и рамки).

Построение тепловых карт

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

-6

построить тепловую карту можно одним из следующих способов:

  1. plt.matshow(df, cmap='viridis')
  2. sns.heatmap(data=df, cmap='viridis')
-7

Построение столбчатой диаграммы

Рассмотрим датасэт с данными о героях из игры dota 2 следующего вида:

-8

Пусть перед нами стоит задача вывести количество ролей у большинства героев (роли героя в игре перечислены в колонке roles). Проблему можно решить разными путями, расскажу об одном:

сначала получим столбец с количеством ролей для каждого героя. Это сделаем путем применения к каждому элементу столбца roles функции с операцией преобразования строки в список и вычисления его длины - num = df['roles'].map(lambda x: len(eval(x))). О том, как это делается, я рассказывал ранее.

Затем посредством вызова метода value_counts для получившегося объекта можно получить Series вида значение - количество:

-9

Для построения столбчатой диаграммы можно вызвать метод plot с параметром kind='bar':

num.value_counts().plot(kind='bar')

-10

Построение графиков плотности

Теперь переключимся на работу с собранием морфологических измерений сортов ирисов (классический набор данных, созданный в 1930-х годах):

-11

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

  1. sns.kdeplot(df[column]) для каждого столбца column
  2. df.plot(kind='kde')

В последнем случае с параметром subplots=True мы по отдельности отобразим графики для каждого параметра:

df.plot(kind='kde', subplots=True)

-12

Построение скрипичных графиков

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

sns.violinplot(df['petal width'], orient ='v')

-13

Построение графиков попарных распределений

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

sns.pairplot(df, hue = 'species')

С помощью hue=параметр можно отдельным цветом выделять точки, принадлежащие разным значениям из диапазона параметра.

-14

Наука
7 млн интересуются