Освоение двухосных графиков в Python с помощью Matplotlib: подробное руководство

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

Метод 1: использование функции Twinx()

Один из самых простых способов создания двухосного графика в Matplotlib — использование функции twinx(). Эта функция позволяет нам создать новый набор двойных осей, которые имеют одну и ту же ось X, но разные оси Y.

import matplotlib.pyplot as plt
# Create the primary axis
fig, ax1 = plt.subplots()
# Plot data on the primary axis
ax1.plot(x, y1, 'b-', label='Data 1')
# Create the secondary axis
ax2 = ax1.twinx()
# Plot data on the secondary axis
ax2.plot(x, y2, 'r-', label='Data 2')
# Customize the plot
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y1-axis')
ax2.set_ylabel('Y2-axis')
# Add legends
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# Display the plot
plt.show()

Метод 2: использование функции Twiny()

Подобно twinx(), функция twiny()создает новый набор двойных осей, которые используют одну и ту же ось Y, но с разными осями X. Этот метод полезен при работе с наборами данных, имеющими разные масштабы по оси X.

import matplotlib.pyplot as plt
# Create the primary axis
fig, ax1 = plt.subplots()
# Plot data on the primary axis
ax1.plot(x1, y, 'b-', label='Data 1')
# Create the secondary axis
ax2 = ax1.twiny()
# Plot data on the secondary axis
ax2.plot(x2, y, 'r-', label='Data 2')
# Customize the plot
ax1.set_xlabel('X1-axis')
ax2.set_xlabel('X2-axis')
ax1.set_ylabel('Y-axis')
# Add legends
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# Display the plot
plt.show()

Метод 3: масштабирование осей вручную

В некоторых случаях данные на основной и вторичной осях могут иметь разные масштабы. Чтобы преодолеть эту проблему, мы можем масштабировать оси вручную с помощью функций set_ylim()или set_xlim().

import matplotlib.pyplot as plt
# Create the primary axis
fig, ax1 = plt.subplots()
# Plot data on the primary axis
ax1.plot(x, y1, 'b-', label='Data 1')
# Create the secondary axis
ax2 = ax1.twinx()
# Plot data on the secondary axis
ax2.plot(x, y2, 'r-', label='Data 2')
# Customize the plot
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y1-axis')
ax2.set_ylabel('Y2-axis')
# Manually scale the y-axes
ax1.set_ylim(0, 100)
ax2.set_ylim(0, 1000)
# Add legends
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# Display the plot
plt.show()

Метод 4: использование вторичной оси Y с разными единицами измерения

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

import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
# Define a custom formatter
def y2_formatter(x, pos):
    return f"{x/1000:.1f}K"  # Format the values in K
# Create the primary axis
fig, ax1 = plt.subplots()
# Plot data on the primary axis
ax1.plot(x, y1, 'b-', label='Data 1')
# Create the secondary axis
ax2 = ax1.twinx()
# Plot data on the secondary axis
ax2.plot(x, y2, 'r-', label='Data 2')
# Customize the plot
ax1.set_xlabel('X-axis')
ax1.set_ylabel('Y1-axis')
ax2.set_ylabel('Y2-axis')
# Apply the custom formatter to the secondary axis
ax2.yaxis.set_major_formatter(FuncFormatter(y2_formatter))
# Add legends
ax1.legend(loc='upper left')
ax2.legend(loc='upper right')
# Display the plot
plt.show()

В этой статье мы рассмотрели различные методы создания двухосных графиков в Python с использованием Matplotlib. Мы научились использовать функции twinx()и twiny()для создания двойных осей, вручную масштабировать оси и даже отображать данные в разных единицах измерения на вторичной оси Y. Освоив эти методы, вы сможете улучшить визуализацию данных и получить более глубокое понимание своих наборов данных. Так что продолжайте экспериментировать с этими методами, чтобы создавать впечатляющие двухосные графики в Python!