February 3, 2021

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

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

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

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

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

  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)

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

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

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

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

  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])

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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