Диаграммы рассеяния Matplotlib – Все, что вам нужно знать

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

Содержание

Загружаем наши данные

Для этого урока мы будем использовать Pandas и Matplotlib. Также давайте импортируем набор данных от Five Thirty Eight по очкам WNBA, который вы можете найти здесь

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

Давайте начнем!

df = pd.read_csv("https://github.com/fivethirtyeight/WNBA-stats/raw/master/wnba-player-stats.csv",
                 usecols = ['player_ID', 'Age', 'MP', 'Tm', 'Wins_Generated', 'year_ID', 'Composite_Rating']
                 )
df = df[df['Tm'].isin(['ATL', 'CHI'])]
df = df.rename(columns={
    'player_ID': 'ID',
    'MP':'Minutes',
    'Tm':'Team',
    'Wins_Generated': 'Wins',
    'year_ID':'Year'
})

df['Team'] = df['Team'].str.replace('ATL', 'Atlanta')
df['Team'] = df['Team'].str.replace('CHI', 'Chicago')

print(df.head())

Как создать диаграммы рассеяния Matplotlib?

Matplotlib использует функцию .scatter() для создания диаграмм рассеяния. Вы можете использовать аргументы x= и y= для передачи данных, а аргумент marker= для установки типа маркера.

Давайте попробуем:

plt.scatter(x=df['Minutes'], y=df['Wins'],marker='o')
plt.show()

Это возвращает следующее изображение:

Matplotlib Scatter Charts Simple

Это всего лишь один из многих доступных маркеров. Если вы хотите сменить маркер, вы можете выбрать из следующих маркеров:

available_markers = ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']

Как добавить заголовки и метки осей в диаграммы рассеяния Matplotlib?

Добавление заголовков и меток осей к диаграммам рассеяния в Matplotlib может быть выполнено с помощью функций .title(), .xlabel() и .ylabel(). Давайте добавим некоторые описательные заголовки к нашему графику:

plt.scatter(x=df['Minutes'], y=df['Wins'],marker='o')
plt.title('Minutes played vs. Games Won')
plt.xlabel('Minutes Played')
plt.ylabel('Games Won')
plt.show()

Это возвращает следующий график:

Matplotlib Scatter Charts Title

Мы можем изменить размер шрифта заголовка и меток осей, передав аргумент fontsize= в соответствующие функции.

Let’s try changing the titles to make it a little prettier:

plt.scatter(x=df['Minutes'], y=df['Wins'],marker='o')
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.show()

Это возвращает следующее изображение:

Как настроить цвета разбросанных маркеров?

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

Давайте изменим цвет команд, чтобы различать их:

atlanta = df[df['Team']=='Atlanta']
chicago = df[df['Team']=='Chicago']

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue')
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink')
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.show()

Мы разделили этот датафрейм на две разные команды. Это сделано для того, чтобы график каждого датафрейма можно было назначить одному цвету и затем наложить его на другой. Это не самый удобный способ, и, конечно, не такой упрощённый, как Seaborn делает это

Matplotlib Scatter Charts Color

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

Как изменить прозрачность маркера?

В данный момент маркеры накладываются друг на друга, и невозможно увидеть, что находится под ними. Это можно исправить, добавив прозрачность маркерам. Мы можем сделать это с помощью параметра alpha= в функции

Давайте установим прозрачность на уровне 0.6, что соответствует 60%:

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6)
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6)
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.show()

Это возвращает следующую диаграмму:

Как добавить легенду в диаграммы рассеяния Matplotlib?

Добавление цвета по умолчанию не позволяет отличить каждую команду. Мы можем добавить легенду, используя параметр label= в функции scatter(), а затем добавив .legend(True).

По умолчанию Matplotlib попытается определить наилучшее место для легенды.

Давайте попробуем это в Python:

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta')
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago')
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.legend()
plt.show()

Этот код возвращает следующий график:

Если мы захотим изменить место расположения на что-то конкретное, мы можем передать аргумент loc= в функцию .legend(). Давайте изменим его на нижний угол.

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta')
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago')
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.legend(loc='lower right')
plt.show()

Это возвращает следующий график:

Matplotlib Scatter Charts Legend

Как добавить сетку на диаграммы?

С таким количеством пустого пространства может быть сложно определить, где именно размещены значения. По этой причине полезно добавить сетку на график. В Matplotlib вы можете сделать это, добавив функцию .grid(True) к объекту plt.

Давайте попробуем:

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta')
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago')
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.legend(loc='lower right')
plt.grid(True)
plt.show()

Этот код возвращает следующий график:

Как изменить размер маркера в диаграммах рассеяния Matplotlib?

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

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

Изменим параметр s= (размер) в функции .scatter()

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta', s=atlanta['Composite_Rating'])
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago', s=chicago['Composite_Rating'])
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.legend(loc='lower right')
plt.grid(True)
plt.show()

Он возвращает следующий график:

Мы можем видеть, что все участки довольно маленькие. Мы можем умножить каждое значение на 10, чтобы увеличить его размер.

plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta', s=atlanta['Composite_Rating']*10)
plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago', s=chicago['Composite_Rating']*10)
plt.title('Minutes played vs. Games Won', fontsize=18)
plt.xlabel('Minutes Played', fontsize=12)
plt.ylabel('Games Won', fontsize=12)
plt.legend(loc='lower right')
plt.grid(True)
plt.show()

Этот код возвращает следующий, гораздо более разборчивый график:

Matplotlib Scatter Charts Size

Как добавить стиль к диаграммам Matplotlib?

Мы можем изменить стили в Matplotlib, используя функцию .style.use(), передавая имя стиля в качестве аргумента в функцию use.

Если вы хотите узнать, какие стили доступны, вы можете выполнить print(plt.style.available), что вернет следующий список:

['Solarize_Light2', '_classic_test_patch', 'bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark', 'seaborn-dark-palette', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'tableau-colorblind10']

Чтобы увидеть все доступные стили, вы можете ознакомиться с официальной документацией здесь

Давайте выведем различные стили графиков, используя цикл for. Мы изменим заголовок графика, установив его в используемый стиль.

for style in ['ggplot', 'fivethirtyeight', 'bmh', 'seaborn']:
  plt.style.use(style)
  plt.scatter(x=atlanta['Minutes'], y=atlanta['Wins'],marker='o', c='cornflowerblue', alpha=0.6, label='Atlanta')
  plt.scatter(x=chicago['Minutes'], y=chicago['Wins'],marker='o', c='hotpink', alpha=0.6, label='Chicago')
  plt.title(f'Style: {style}', fontsize=18)
  plt.xlabel('Minutes Played', fontsize=12)
  plt.ylabel('Games Won', fontsize=12)
  plt.legend(loc='best')
  plt.grid(True)
  plt.show()

Это возвращает следующие графики:

Matplotlib Scatter Charts Style

Заключение

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

Last updated