Точечный график с гистограммами

Beginner

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

Введение

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

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

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

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

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

Импортировать библиотеки

Прежде чем мы сможем начать, нам нужно импортировать необходимые библиотеки. В этом практическом занятии мы будем использовать Matplotlib и NumPy.

import matplotlib.pyplot as plt
import numpy as np

Генерировать случайные данные

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

## Fixing random state for reproducibility
np.random.seed(19680801)

## Generate random data
x = np.random.randn(1000)
y = np.random.randn(1000)

Определить функцию scatter_hist

Нам нужно определить функцию scatter_hist, которая принимает данные x и y, а также три оси: основную ось для точечного графика и две боковые оси. Затем она создаст точечный график и гистограммы внутри предоставленных осей.

def scatter_hist(x, y, ax, ax_histx, ax_histy):
    ## Remove labels from the histograms
    ax_histx.tick_params(axis="x", labelbottom=False)
    ax_histy.tick_params(axis="y", labelleft=False)

    ## Create the scatter plot
    ax.scatter(x, y)

    ## Determine nice limits by hand
    binwidth = 0.25
    xymax = max(np.max(np.abs(x)), np.max(np.abs(y)))
    lim = (int(xymax/binwidth) + 1) * binwidth

    bins = np.arange(-lim, lim + binwidth, binwidth)
    ax_histx.hist(x, bins=bins)
    ax_histy.hist(y, bins=bins, orientation='horizontal')

Определить позиции осей с использованием gridspec

Теперь мы определим gridspec с неравномерными соотношениями ширины и высоты, чтобы достичь желаемого макета. Мы также создадим оси и передадим их в функцию scatter_hist.

## Start with a square Figure.
fig = plt.figure(figsize=(6, 6))
## Add a gridspec with two rows and two columns and a ratio of 1 to 4 between
## the size of the marginal axes and the main axes in both directions.
## Also adjust the subplot parameters for a square plot.
gs = fig.add_gridspec(2, 2,  width_ratios=(4, 1), height_ratios=(1, 4),
                      left=0.1, right=0.9, bottom=0.1, top=0.9,
                      wspace=0.05, hspace=0.05)
## Create the Axes.
ax = fig.add_subplot(gs[1, 0])
ax_histx = fig.add_subplot(gs[0, 0], sharex=ax)
ax_histy = fig.add_subplot(gs[1, 1], sharey=ax)
## Draw the scatter plot and marginals.
scatter_hist(x, y, ax, ax_histx, ax_histy)

Определить позиции осей с использованием inset_axes

Мы также можем использовать inset_axes, чтобы располагать боковые оси за пределами основной оси. Преимущество этого заключается в том, что соотношение сторон основной оси может быть фиксировано, а боковые оси всегда будут рисоваться относительно положения оси.

## Create a Figure, which doesn't have to be square.
fig = plt.figure(layout='constrained')
## Create the main axes, leaving 25% of the figure space at the top and on the right to position marginals.
ax = fig.add_gridspec(top=0.75, right=0.75).subplots()
## The main axes' aspect can be fixed.
ax.set(aspect=1)
## Create marginal axes, which have 25% of the size of the main axes.
## Note that the inset axes are positioned *outside* (on the right and the top) of the main axes,
## by specifying axes coordinates greater than 1.
## Axes coordinates less than 0 would likewise specify positions on the left and the bottom of the main axes.
ax_histx = ax.inset_axes([0, 1.05, 1, 0.25], sharex=ax)
ax_histy = ax.inset_axes([1.05, 0, 0.25, 1], sharey=ax)
## Draw the scatter plot and marginals.
scatter_hist(x, y, ax, ax_histx, ax_histy)

Показать график

Наконец, мы можем показать график с использованием plt.show().

plt.show()

Резюме

В этом практическом занятии мы узнали, как создавать точечный график с гистограммами с использованием Matplotlib. Мы определили функцию scatter_hist, сгенерировали случайные данные, определили позиции осей с использованием gridspec и inset_axes, и показали график. Точечные графики с гистограммами - прекрасный способ визуализировать распределение двух переменных и их взаимосвязь.