Создание диаграмм рассеяния с легендами

Beginner

This tutorial is from open-source community. Access the source code

Введение

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

Советы по работе с ВМ

После запуска виртуальной машины кликните в верхнем левом углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Лэби. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импорт необходимых библиотек

Начнем с импорта необходимых библиотек, в том числе NumPy и Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Создание диаграммы рассеяния с несколькими группами

Мы можем создать диаграмму рассеяния с несколькими группами, пройдя в цикле по каждой группе и создав для нее диаграмму рассеяния. Мы задаем цвет, размер и прозрачность маркеров для каждой группы с использованием параметров c, s и alpha соответственно. Мы также задаем параметр label именем группы, которое будет использоваться в легенде.

fig, ax = plt.subplots()
for color in ['tab:blue', 'tab:orange', 'tab:green']:
    n = 750
    x, y = np.random.rand(2, n)
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=color,
               alpha=0.3, edgecolors='none')

ax.legend()
ax.grid(True)

plt.show()

Автоматическое создание легенды

Мы также можем использовать метод PathCollection.legend_elements, чтобы автоматически создать легенду для диаграммы рассеяния. Этот метод попытается определить полезное количество элементов легенды для отображения и вернет кортеж из объектов легенды и меток.

N = 45
x, y = np.random.rand(2, N)
c = np.random.randint(1, 5, size=N)
s = np.random.randint(10, 220, size=N)

fig, ax = plt.subplots()

scatter = ax.scatter(x, y, c=c, s=s)

## produce a legend with the unique colors from the scatter
legend1 = ax.legend(*scatter.legend_elements(),
                    loc="lower left", title="Classes")
ax.add_artist(legend1)

## produce a legend with a cross-section of sizes from the scatter
handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
legend2 = ax.legend(handles, labels, loc="upper right", title="Sizes")

plt.show()

Настройка элементов легенды

Мы можем дальнейше настроить элементы легенды, используя дополнительные аргументы в методе PathCollection.legend_elements. Например, мы можем указать количество элементов легенды, которое должно быть создано, и как они должны быть подписаны.

volume = np.random.rayleigh(27, size=40)
amount = np.random.poisson(10, size=40)
ranking = np.random.normal(size=40)
price = np.random.uniform(1, 10, size=40)

fig, ax = plt.subplots()

## Because the price is much too small when being provided as size for ``s``,
## we normalize it to some useful point sizes, s=0.3*(price*3)**2
scatter = ax.scatter(volume, amount, c=ranking, s=0.3*(price*3)**2,
                     vmin=-3, vmax=3, cmap="Spectral")

## Produce a legend for the ranking (colors). Even though there are 40 different
## rankings, we only want to show 5 of them in the legend.
legend1 = ax.legend(*scatter.legend_elements(num=5),
                    loc="upper left", title="Ranking")
ax.add_artist(legend1)

## Produce a legend for the price (sizes). Because we want to show the prices
## in dollars, we use the *func* argument to supply the inverse of the function
## used to calculate the sizes from above. The *fmt* ensures to show the price
## in dollars. Note how we target at 5 elements here, but obtain only 4 in the
## created legend due to the automatic round prices that are chosen for us.
kw = dict(prop="sizes", num=5, color=scatter.cmap(0.7), fmt="$ {x:.2f}",
          func=lambda s: np.sqrt(s/.3)/3)
legend2 = ax.legend(*scatter.legend_elements(**kw),
                    loc="lower right", title="Price")

plt.show()

Резюме

В этом практическом занятии мы узнали, как создавать диаграммы рассеяния с легендами в Python с использованием библиотеки Matplotlib. Мы создали диаграммы рассеяния с несколькими группами и автоматически создали легенды. Мы также настроили элементы легенды с использованием метода PathCollection.legend_elements. Диаграммы рассеяния с легендами полезны для визуализации связи между двумя переменными с несколькими группами.