Самый простой способ создать график Matplotlib с двумя осями Y — использовать функцию twinx() .
В следующем примере показано, как использовать эту функцию на практике.
Пример: создание графика Matplotlib с двумя осями Y
Предположим, у нас есть следующие два Pandas DataFrames:
import pandas as pd
#create DataFrames
df1 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'sales': [14, 16, 19, 22, 24, 25, 24, 24, 27, 30]})
df2 = pd.DataFrame({'year': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'leads': [4, 4, 4, 5, 4, 5, 7, 8, 5, 3]})
Оба кадра данных используют переменную «год», которая находится в диапазоне от 1 до 10, но первый кадр данных отображает общий объем продаж каждый год, а второй кадр данных отображает общее количество потенциальных клиентов каждый год.
Мы можем использовать следующий код для создания графика Matplotlib, который отображает продажи и потенциальных клиентов на одной диаграмме с двумя осями Y:
import matplotlib.pyplot as plt
#define colors to use
col1 = 'steelblue '
col2 = 'red '
#define subplots
fig,ax = plt.subplots()
#add first line to plot
ax.plot(df1.year , df1.sales , color=col1)
#add x-axis label
ax.set_xlabel('Year', fontsize= 14 )
#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize= 16 )
#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx ()
#add second line to plot
ax2.plot(df2. year , df2. leads , color=col2)
#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize= 16 )
Ось Y в левой части графика показывает общий объем продаж по годам, а ось Y в правой части графика показывает общее количество лидов по годам.
Синяя линия на графике представляет общий объем продаж по годам, а красная линия — общее количество лидов по годам.
Не стесняйтесь использовать аргументы marker и linewidth для изменения внешнего вида линий на диаграмме:
import matplotlib.pyplot as plt
#define colors to use
col1 = 'steelblue '
col2 = 'red '
#define subplots
fig,ax = plt.subplots()
#add first line to plot
ax.plot(df1.year , df1.sales , color=col1, marker='o', linewidth= 3 )
#add x-axis label
ax.set_xlabel('Year', fontsize= 14 )
#add y-axis label
ax.set_ylabel('Sales', color=col1, fontsize= 16 )
#define second y-axis that shares x-axis with current plot
ax2 = ax.twinx ()
#add second line to plot
ax2.plot(df2. year , df2. leads , color=col2, marker='o', linewidth= 3 )
#add second y-axis label
ax2.set_ylabel('Leads', color=col2, fontsize= 16 )
Обратите внимание, что обе линии стали шире и содержат маркеры «o» для отображения отдельных точек данных.
Дополнительные ресурсы
В следующих руководствах объясняется, как выполнять другие распространенные операции в Matplotlib:
Как настроить положение метки оси в Matplotlib
Как установить диапазоны осей в Matplotlib
Как установить значения оси X в Matplotlib