Вы строите график на двух отдельных осях, поэтому, когда вы вызываете plt.legend()
, он принимает только самую текущую ось. Вы можете обойти это, создав прокси-художников и добавив их в легенду вручную:
import matplotlib.pyplot as plt
# import lines so we can create Line2D instances to go into the legend
import matplotlib.lines as mlines
fig, ax = plt.subplots(1)
line0 = ax.plot(range(20),range(20), 'ob-', label = "Sweden Crime Rate")
ax.set_ylabel("Sweden Crime Rate")
ax.set_xlabel("Year")
# setup the second axis
ax2 = ax.twinx()
ax2.set_ylabel("Sweden Population Growth (in millions)")
# plot the second line
line1 = ax2.plot(range(10),range(10), 'xr-')
plt.title("Sweden Crime Rate and Population Growth")
# Create proxy artists to add to the legend
red_line = mlines.Line2D([], [], color='red', marker='x', markersize=8, label='Sweden population growth')
blue_line = mlines.Line2D([], [], color='blue', marker='o', markersize=8, label='Sweden crime rate')
# Add the created lines to the legend
plt.legend(handles=[red_line, blue_line], loc='lower right')
plt.show()
В качестве примечания, я использовал twinx()
здесь, чтобы установить вторую ось, оформить документацию . Использование прокси-художников таким образом дает вам больше гибкости в том, что вы представляете в своей легенде. Вот вывод (очевидно, не реальные данные):