Построение графиков с Python
Python имеет очень гибкие возможности по рисованию различных картинок и графиков (простых линий, связывающих точки, графиков плотности и рассеяния, гистограмм, столбчатых диаграмм и более сложных конструкций, включая трехмерные фигуры). Основными библиотеками для этого являются Pandas, Matplotlib, Seaborn.
Построение простых линейных графиков
Допустим в вашем распоряжении таблица показателей дохода в разные промежутки времени:
Для вывода простейшего графика, связывающего точки дохода в разные промежутки времени, можно воспользоваться любой из перечисленных библиотек:
- с использованием встроенных возможностей Pandas - df.plot(kind='line')
- посредством Matplotlib (plt - псевдоним matplotlib.pyplot ) - plt.plot(df.index, df.income)
- посредством Seaborn (sns - псевдоним) - sns.lineplot(x=df.index, y=df.income)
График с незначительными отличиями будет иметь следующий вид:
Построение диаграмм рассеяния
Для указанного ниже набора точек построим диаграмму рассеяния:
Для этого можно опять пойти тремя путями (перечислю в том же порядке):
- df.plot(kind='scatter', x='x',y='y')
- plt.scatter(df['x'], df['y'])
- sns.scatterplot(df.iloc[:, 0], df.iloc[:, 1])
Обратите внимание на стиль использования возможностей каждой из библиотек. Визуализация в Pandas производится посредством вызова метода plot объекта, которому требуется указать лишь названия используемых осей, а также вид графика. В то же время визуализация в других библиотеках осуществляется посредством вызова функций отображения различного вида графиков (у каждого свое название) и заданием последовательностей данных (а не только названий осей, как в Pandas).
Отмечу, что данные графики можно построить и с помощью plot, однако scatter предоставляет гораздо больше возможностей по форматированию отдельных точек (размер, цвет заливки и рамки).
Построение тепловых карт
Тепловая карта может отображать величину связи между параметрами в зависимости от интенсивности цвета. Например, рассмотрим данные, представляющие геномные расстояния между видами:
построить тепловую карту можно одним из следующих способов:
- plt.matshow(df, cmap='viridis')
- 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. Чтобы начертить для каждого морфологического измерения график, можно поступить следующим образом:
- sns.kdeplot(df[column]) для каждого столбца column
- 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=параметр можно отдельным цветом выделять точки, принадлежащие разным значениям из диапазона параметра.