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 предоставляет широкие возможности для создания комбинированных графиков. Объединение диаграмм рассеяния и линейных графиков на одном изображении позволяет наглядно представить данные и упростить их анализ. Используйте различные параметры настройки, вторичные оси и подграфики для создания информативных и профессиональных визуализаций.