Matplotlib: Создание диаграммы рассеяния и графика на одном графике — подробное руководство

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

Основы построения диаграммы рассеяния и графика в Matplotlib

Создание простого графика рассеяния и линейного графика по отдельности с использованием plt.scatter и plt.plot

Начнем с основ. Чтобы создать диаграмму рассеяния, используем функцию plt.scatter(), а для линейного графика – plt.plot(). Предположим, у нас есть следующие данные:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
z = np.random.rand(100)

plt.scatter(x, z)
plt.show()

plt.plot(x, y)
plt.show()

Этот код создаст два отдельных графика: диаграмму рассеяния случайных точек и синусоиду.

Объединение диаграммы рассеяния и линейного графика на одном графике: базовый подход

Чтобы объединить эти графики, достаточно вызвать plt.scatter() и plt.plot() последовательно в одном блоке кода:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
z = np.random.rand(100)

plt.plot(x, y, label='sin(x)')
plt.scatter(x, z, label='random points')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.title('Combined Plot')
plt.legend()
plt.show()

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

Использование нескольких осей для комбинированных графиков

Применение plt.twinx() для создания вторичной оси Y: когда это необходимо и как это работает

Иногда данные, которые мы хотим отобразить, имеют разные масштабы. В таких случаях полезно использовать вторичную ось Y. Функция plt.twinx() позволяет создать вторую ось Y, которая разделяет ось X с первой.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = x**2

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-', label='sin(x)')
ax2.plot(x, y2, 'b-', label='x^2')

ax1.set_xlabel('X axis')
ax1.set_ylabel('sin(x)', color='g')
ax2.set_ylabel('x^2', color='b')

plt.title('Plot with Two Y Axes')

fig.legend()

plt.show()

В этом примере мы создаем график синусоиды и параболы, каждая из которых отображается на своей оси Y. Обратите внимание на использование fig.legend() вместо plt.legend() для правильного отображения легенды для обоих графиков.

Настройка осей: установка пределов, меток и заголовков для каждой оси

Для каждой оси можно настроить пределы, метки и заголовки. Используйте ax1.set_ylim() и ax2.set_ylim() для установки пределов осей Y, ax1.set_xlabel() для оси X, ax1.set_ylabel() и ax2.set_ylabel() для осей Y, и plt.title() для заголовка графика.

Реклама

Настройка внешнего вида комбинированных графиков

Изменение цветов, маркеров и стилей линий для различения графиков

Чтобы графики было легко различать, можно изменить их цвета, маркеры и стили линий. В функциях plt.plot() и plt.scatter() можно указывать параметры color, marker и linestyle.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
z = np.random.rand(100)

plt.plot(x, y, color='red', linestyle='--', label='sin(x)')
plt.scatter(x, z, color='blue', marker='o', label='random points')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.title('Customized Plot')
plt.legend()
plt.show()

Добавление легенды для идентификации данных: размещение, настройка заголовков

Легенда – важный элемент комбинированного графика. Она позволяет понять, какой график что представляет. С помощью параметра loc можно указать расположение легенды, а с помощью title – задать заголовок легенды.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y = np.sin(x)
z = np.random.rand(100)

plt.plot(x, y, label='sin(x)')
plt.scatter(x, z, label='random points')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.title('Plot with Legend')
plt.legend(loc='upper right', title='Legend')
plt.show()

Решение проблем и продвинутые техники

Решение проблем масштабирования и перекрытия данных при объединении графиков

При объединении графиков с разными масштабами или плотностью данных может возникнуть проблема перекрытия. Использование plt.twinx() – один из способов решения этой проблемы. Также можно масштабировать данные перед построением графиков.

Создание сложных комбинированных графиков с использованием нескольких подграфиков (subplots) и различных типов данных

Для создания более сложных комбинированных графиков можно использовать подграфики (subplots). Функция plt.subplots() позволяет создать несколько графиков в одной фигуре. Это полезно, когда нужно отобразить несколько наборов данных или графиков разных типов.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
z = np.random.rand(100)

fig, axs = plt.subplots(2, 1, figsize=(8, 6))

axs[0].plot(x, y1, label='sin(x)')
axs[0].scatter(x, z, label='random points')
axs[0].set_title('Subplot 1')
axs[0].legend()

axs[1].plot(x, y2, label='cos(x)')
axs[1].set_title('Subplot 2')
axs[1].legend()

plt.tight_layout()
plt.show()

В этом примере мы создаем два подграфика: на первом отображается синусоида и диаграмма рассеяния, а на втором – косинусоида. Функция plt.tight_layout() обеспечивает оптимальное расположение подграфиков.

Заключение

Matplotlib предоставляет широкие возможности для создания комбинированных графиков. Объединение диаграмм рассеяния и линейных графиков на одном изображении позволяет наглядно представить данные и упростить их анализ. Используйте различные параметры настройки, вторичные оси и подграфики для создания информативных и профессиональных визуализаций.


Добавить комментарий