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

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

Содержание

* [Загружаем наши данные](#zagruzhaem-nashi-dannye)
* [Как создать диаграммы рассеяния Matplotlib?](#kak-sozdat-diagrammy-rasseyaniya-matplotlib)
* [Как добавить заголовки и метки осей в диаграммы рассеяния Matplotlib?](#kak-dobavit-zagolovki-i-metki-osei-v-diagrammy-rasseyaniya-matplotlib)
* [Как настроить цвета разбросанных маркеров?](#kak-nastroit-cveta-razbrosannykh-markerov)
* [Как изменить прозрачность маркера?](#kak-izmenit-prozrachnost-markera)
* [Как добавить легенду в диаграммы рассеяния Matplotlib?](#kak-dobavit-legendu-v-diagrammy-rasseyaniya-matplotlib)
* [Как добавить сетку на диаграммы?](#kak-dobavit-setku-na-diagrammy)
* [Как изменить размер маркера в диаграммах рассеяния Matplotlib?](#kak-izmenit-razmer-markera-v-diagrammakh-rasseyaniya-matplotlib)
* [Как добавить стиль к диаграммам Matplotlib?](#kak-dobavit-stil-k-diagrammam-matplotlib)
* [Заключение](#zaklyuchenie)

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

Для этого урока мы будем использовать Pandas и Matplotlib. Также давайте импортируем набор данных от Five Thirty Eight по очкам WNBA, который [вы можете найти здесь](https://github.com/fivethirtyeight/WNBA-stats/raw/master/wnba-player-stats.csv)

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

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

{% tabs %}
{% tab title="Код" %}
```python
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())
```
{% endtab %}

{% tab title="Результат выполнение" %}
```
           ID  Year  Age     Team  Minutes  Composite_Rating  Wins
0  montgre01w  2019   32  Atlanta      949              -2.4  1.22
1  williel01w  2019   26  Atlanta      909               0.6  2.51
2  sykesbr01w  2019   25  Atlanta      880              -3.4  0.70
3  hayesti01w  2019   29  Atlanta      817              -1.5  1.45
4  brelaje01w  2019   31  Atlanta      767              -0.8  1.62
```
{% endtab %}
{% endtabs %}

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

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

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

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

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-01.png" alt="Matplotlib Scatter Charts Simple" height="248" width="363"><figcaption></figcaption></figure>

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

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

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

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-02.png" alt="Matplotlib Scatter Charts Title" height="278" width="377"><figcaption></figcaption></figure>

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

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-03.png" alt="" height="285" width="380"><figcaption></figcaption></figure>

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

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

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

```python
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 делает это](../seaborn)

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-04.png" alt="Matplotlib Scatter Charts Color" height="285" width="380"><figcaption></figcaption></figure>

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

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

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

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-05.png" alt="" height="285" width="380"><figcaption></figcaption></figure>

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

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

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

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

```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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-06.png" alt="" height="285" width="380"><figcaption></figcaption></figure>

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

```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(loc='lower right')
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-07.png" alt="Matplotlib Scatter Charts Legend" height="285" width="380"><figcaption></figcaption></figure>

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

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

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

```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(loc='lower right')
plt.grid(True)
plt.show()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-08.png" alt="" height="285" width="380"><figcaption></figcaption></figure>

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

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

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

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-09.png" alt="" height="302" width="424"><figcaption></figcaption></figure>

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-10.png" alt="Matplotlib Scatter Charts Size" height="302" width="424"><figcaption></figcaption></figure>

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

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

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

```python
['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']
```

Чтобы увидеть все доступные стили, вы можете ознакомиться [с официальной документацией здесь](https://matplotlib.org/3.1.1/gallery/style_sheets/style_sheets_reference.html)

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

```python
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()
```

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

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-12-300x214.png" alt="Matplotlib Scatter Charts Style" height="214" width="300"><figcaption></figcaption></figure>

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-13-300x214.png" alt="" height="214" width="300"><figcaption></figcaption></figure>

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-14-300x214.png" alt="" height="214" width="300"><figcaption></figcaption></figure>

<figure><img src="http://datagy.io/wp-content/uploads/2021/02/Matplotlib-Scatter-Charts-15-300x213.png" alt="" height="213" width="300"><figcaption></figcaption></figure>

### Заключение

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