Диаграмма рассеяния Matplotlib с диаграммами распределения (совместная диаграмма) - Учебное пособие и примеры

Введение В Python существует множество библиотек визуализации данных, но Matplotlib - самая популярная из них. Популярность Matplotlib объясняется его надежностью и полезностью - он может создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами. В этом уроке мы расскажем, как построить совместный график в Matplotlib, который состоит из точечной диаграммы [/ matplotlib-scatterplot-tutorial-and-examples /] и нескольких распределений Pl.

Вступление

В Python есть много библиотек визуализации данных, но Matplotlib - самая популярная из них. Популярность Matplotlib объясняется его надежностью и полезностью - он может создавать как простые, так и сложные графики с небольшим количеством кода. Вы также можете настроить графики различными способами.

В этом уроке мы расскажем, как построить совместный график в Matplotlib, который состоит из точечной диаграммы и нескольких графиков распределения на одном и том же Figure .

Совместные графики используются для одновременного изучения взаимосвязей между двумерными данными, а также их распределения.

Примечание. Задачи такого типа больше подходят для таких библиотек, как Seaborn, в которых есть встроенная jointplot() . GridSpec Joint Plot вручную, используя GridSpec и несколько Axes , вместо того, чтобы делать это за нас Seaborn.

Импорт данных

Мы будем использовать знаменитый набор данных Iris , поскольку мы можем исследовать взаимосвязь между такими функциями, как SepalWidthCm и SepalLengthCm помощью точечной диаграммы, но также исследуем распределения между Species с учетом длины / ширины чашелистиков с помощью графиков распределения в то же время.

Давайте импортируем набор данных и посмотрим:

 import pandas as pd 
 
 df = pd.read_csv('iris.csv') 
 print(df.head()) 

Это приводит к:

 Id SepalLengthCm SepalWidthCm PetalLengthCm PetalWidthCm Species 
 0 1 5.1 3.5 1.4 0.2 Iris-setosa 
 1 2 4.9 3.0 1.4 0.2 Iris-setosa 
 2 3 4.7 3.2 1.3 0.2 Iris-setosa 
 3 4 4.6 3.1 1.5 0.2 Iris-setosa 
 4 5 5.0 3.6 1.4 0.2 Iris-setosa 

Здесь мы будем исследовать двумерные отношения между SepalLengthCm и SepalWidthCm , а также их распределения. Мы можем подойти к этому двумя способами - относительно их Species или нет.

Мы можем полностью игнорировать Species и просто строить гистограммы распределения каждого экземпляра цветка. С другой стороны, мы можем кодировать цветом и строить графики распределения каждого экземпляра цветка, также подчеркивая разницу в их Species .

Мы рассмотрим здесь оба варианта, начиная с более простого - вообще Species

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

В первом подходе мы просто загрузим экземпляры цветов и построим их как есть, без учета их Species .

Мы будем использовать GridSpec для настройки макета нашей фигуры, чтобы освободить место для трех разных графиков и экземпляров Axes

Чтобы вызвать GridSpec , мы хотим импортировать его вместе с экземпляром PyPlot:

 import pandas as pd 
 import matplotlib.pyplot as plt 
 from matplotlib.gridspec import GridSpec 

Теперь давайте создадим нашу Figure и создадим объекты Axes

 df = pd.read_csv('iris.csv') 
 
 fig = plt.figure() 
 gs = GridSpec(4, 4) 
 
 ax_scatter = fig.add_subplot(gs[1:4, 0:3]) 
 ax_hist_y = fig.add_subplot(gs[0,0:3]) 
 ax_hist_x = fig.add_subplot(gs[1:4, 3]) 
 
 plt.show() 

Мы создали 3 Axes , добавив подзаголовки к фигуре, используя наш GridSpec для их размещения. Это приводит к Figure с 3 пустыми экземплярами Axes

matplotlib gridspec для совместногографика{.ezlazyload}

Теперь, когда у нас есть макет и расположение, все, что нам нужно сделать, это нанести данные на наши Axes . Давайте обновим скрипт, чтобы построить характеристики SepalLengthCm и SepalWidthCm через диаграмму рассеяния на наших ax_scatter , а каждую из этих функций на ax_hist_y и ax_hist_x :

 import pandas as pd 
 import matplotlib.pyplot as plt 
 from matplotlib.gridspec import GridSpec 
 
 df = pd.read_csv('iris.csv') 
 
 fig = plt.figure() 
 gs = GridSpec(4, 4) 
 
 ax_scatter = fig.add_subplot(gs[1:4, 0:3]) 
 ax_hist_x = fig.add_subplot(gs[0,0:3]) 
 ax_hist_y = fig.add_subplot(gs[1:4, 3]) 
 
 ax_scatter.scatter(df['SepalLengthCm'], df['SepalWidthCm']) 
 
 ax_hist_x.hist(df['SepalLengthCm']) 
 ax_hist_y.hist(df['SepalWidthCm'], orientation = 'horizontal') 
 
 plt.show() 

Мы установили orientation ax_hist_y на horizontal чтобы она отображалась горизонтально, с правой стороны точечной диаграммы, в той же ориентации, которую мы установили для наших осей, используя GridSpec :

простой совместный график matplotlib с гистограммой одногокласса{.ezlazyload}

В результате получается совместный SepalLengthCm и SepalWidthCm , а также распределения для соответствующих функций.

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

Теперь еще один случай, который мы могли бы захотеть изучить, - это распределение этих особенностей по отношению к Species цветка, так как это может повлиять на диапазон длины и ширины чашелистиков.

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

Для этого нам сначала нужно проанализировать DataFrame мы использовали раньше, по Species цветов:

 import pandas as pd 
 import matplotlib.pyplot as plt 
 from matplotlib.gridspec import GridSpec 
 
 df = pd.read_csv('iris.csv') 
 
 setosa = df[df['Species']=='Iris-setosa'] 
 virginica = df[df['Species']=='Iris-virginica'] 
 versicolor = df[df['Species']=='Iris-versicolor'] 
 species = df['Species'] 
 colors = { 
 'Iris-setosa' : 'tab:blue', 
 'Iris-versicolor' : 'tab:red', 
 'Iris-virginica' : 'tab:green' 
 } 

Здесь мы только что отфильтровали DataFrame Species на три отдельных набора данных. setosa данных setosa, virginica и versicolor теперь содержат только соответствующие экземпляры.

Мы также захотим окрасить каждый из этих экземпляров другим цветом в зависимости от их Species как на диаграмме рассеяния, так и на гистограммах. Для этого мы просто вырезали Series Species и составили colors , который мы будем использовать для map() Species каждого цветка с цветом позже.

Теперь давайте GridSpec экземпляры Figure , GridSpec и Axes

 fig = plt.figure() 
 gs = GridSpec(4, 4) 
 
 ax_scatter = fig.add_subplot(gs[1:4, 0:3]) 
 ax_hist_y = fig.add_subplot(gs[0,0:3]) 
 ax_hist_x = fig.add_subplot(gs[1:4, 3]) 

Наконец, мы можем построить диаграмму рассеяния и гистограммы, установив их цвета и ориентацию соответственно:

 ax_scatter.scatter(df['SepalLengthCm'], df['SepalWidthCm'], c=species.map(colors)) 
 
 ax_hist_y.hist(versicolor['SepalLengthCm'], color='tab:red', alpha=0.4) 
 ax_hist_y.hist(virginica['SepalLengthCm'], color='tab:green', alpha=0.4) 
 ax_hist_y.hist(setosa['SepalLengthCm'], color='tab:blue', alpha=0.4) 
 
 ax_hist_x.hist(versicolor['SepalWidthCm'], orientation = 'horizontal', color='tab:red', alpha=0.4) 
 ax_hist_x.hist(virginica['SepalWidthCm'], orientation = 'horizontal', color='tab:green', alpha=0.4) 
 ax_hist_x.hist(setosa['SepalWidthCm'], orientation = 'horizontal', color='tab:blue', alpha=0.4) 
 
 plt.show() 

Результатом вызова map() Series цветов:

 0 tab:blue 
 1 tab:blue 
 2 tab:blue 
 3 tab:blue 
 4 tab:blue 
 ... 
 145 tab:green 
 146 tab:green 
 147 tab:green 
 148 tab:green 
 149 tab:green 

Когда c аргументу scatter() , он применяет цвета к экземплярам в указанном порядке, эффективно окрашивая каждый экземпляр цветом, соответствующим его виду.

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

Выполнение этого кода приводит к:

совместный график matplotlib с гистограммой несколькихклассов{.ezlazyload}

Теперь у каждого Species есть свой цвет и распределение, нанесенное отдельно от других цветов. Кроме того, они имеют цветовую кодировку с помощью точечной диаграммы, поэтому это действительно интуитивно понятный график, который можно легко читать и интерпретировать.

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

совместный график matplotlib, гистограммашагов{.ezlazyload}

Заключение

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

Хотя эта задача больше подходит для таких библиотек, как Seaborn, которые имеют встроенную поддержку совместных графиков, Matplotlib является базовым механизмом, который позволяет Seaborn легко создавать эти графики.

Если вас интересует визуализация данных и вы не знаете, с чего начать, обязательно ознакомьтесь с нашим комплектом книг по визуализации данных в Python{.ebook-link} :

::: {style=“border: 1px solid #ebebeb;padding: 15px;"} {.ebook-link}

Визуализация данных в Python

::: {.row} ::: {.col-md-4 .col-xs-12} {.ezlazyload .img-responsive .center-block} :::

::: {.col-md-8 .col-xs-12 .my-auto} Станьте опасными с визуализацией данных

✅ 30-дневная гарантия возврата денег без вопросов

✅ от начального до продвинутого

✅ Регулярно обновляется бесплатно (последнее обновление в апреле 2021 г.)

✅ Обновлено с бонусными ресурсами и руководствами ::: ::: :::

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

Он служит подробным руководством, которое научит вас всему, что вам нужно знать о Pandas и Matplotlib, в том числе о том, как создавать типы графиков, которые не встроены в саму библиотеку.

Книга «Визуализация данных в Python» , книга для начинающих и средних разработчиков Python, проведет вас через простые манипуляции с данными с помощью Pandas, охватит основные библиотеки построения графиков, такие как Matplotlib и Seaborn, и покажет, как использовать преимущества декларативных и экспериментальных библиотек, таких как Altair. В частности, на протяжении 11 глав эта книга охватывает 9 библиотек Python: Pandas, Matplotlib, Seaborn, Bokeh, Altair, Plotly, GGPlot, GeoPandas и VisPy.

Он служит уникальным практическим руководством по визуализации данных в виде множества инструментов, которые вы можете использовать в своей карьере.

comments powered by Disqus