Рассмотрите возможность создания отдельных страновых графиков со вторичной осью, поскольку вы отслеживаете две метрики разных шкал: Доход и Плодородие .Для этой настройки вам нужно изменить длинный формат на pandas.melt()
.Затем выполните итерацию по отдельным странам для фильтрации фреймов данных.
Данные
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df1 = pd.DataFrame({'Country': ['A', 'B', 'C'],
'Year 1': [50, 70, 10],
'Year 2': [30, 20, 20],
'Year 3': [20, 90, 30]})
df1 = df1.melt(id_vars='Country', value_name='Income', var_name='Year')
df2 = pd.DataFrame({'Country': ['A', 'B', 'C'],
'Year 1': [1.5, 2, 1],
'Year 2': [2.0, 2, 1],
'Year 3': [2.5, 3, 4]})
df2 = df2.melt(id_vars='Country', value_name='Fertility', var_name='Year')
График
for c in df1['Country'].unique():
fig, ax1 = plt.subplots(figsize=(10,4))
ax2 = ax1.twinx()
df1[df1['Country']==c].plot(kind='line', x='Year', y='Income', ax=ax1, color='g', legend=False)
df2[df2['Country']==c].plot(kind='line', x='Year', y='Fertility', ax=ax2, color='b', legend=False)
plt.title('Country ' + c)
ax1.set_xlabel('Years')
ax1.set_ylabel('Average Income Per Year')
ax2.set_ylabel('Fertility Rate')
lines = ax1.get_lines() + ax2.get_lines()
ax1.legend(lines, [l.get_label() for l in lines], loc='upper left')
ax1.set_xticks(np.arange(3))
ax1.set_xticklabels(df1["Year"].unique())
plt.show()
plt.clf()
plt.close()
![Plot Output](https://i.stack.imgur.com/7bPZk.jpg)