Как добавить метки графика разных осей к одной и той же легенде в Python?

Я пытаюсь построить две кривые по двум осям Y, как показано на рисунке. Красный график (давление) по первичной оси и зеленый (подъем иглы) по вторичной оси. И я пытаюсь добавить метки сюжета к той же легенде. Но я не могу добавить их к одной легенде. Он перекрывается, как показано на рисунке, Сырье размещено над подъемником иглы.

введите описание изображения здесь

Код, который я использовал:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker as mtick
data = np.genfromtxt("secondary_axis.dat", skiprows = 2, delimiter = ',')
time = data[:, 0]
pressure = data[:, 1] * 0.006894759086775369
pressure_charge = data[0, 0]
needle_lift = data[:, 2]
figure = plt.figure(figsize=(5.15, 5.15))
figure.clf()
plot = plt.subplot(111)
plot.plot(time, pressure, label = r'\textit{Raw}')
plot.set_xlabel(r'\textit{X}', labelpad=6)
plot.set_ylabel(r'\textit{Y}', labelpad=6)
primary_ticks = len(plot.yaxis.get_major_ticks())
ax2 = plot.twinx()
ax2.plot(time, needle_lift, label = r'\textit{Needle lift}', color='#4DAF4A')
plot.set_zorder(ax2.get_zorder()+2)
plot.patch.set_visible(False)
ax2.grid(False)
ax2.set_ylabel(r'\textit{Z}', labelpad=6)
ax2.yaxis.set_major_locator(mtick.LinearLocator(primary_ticks))
plot.legend(loc = 'center left', bbox_to_anchor = (1.2, 0.5))
ax2.legend(loc = 'center left', bbox_to_anchor = (1.2, 0.5))
plt.show()

Данные доступны здесь.

Как добавить к одной легенде метки графиков разных осей? Я хочу, чтобы они были упорядочены так же, как вы, когда на главной оси нанесено несколько линий, как показано ниже:

введите описание изображения здесь


person Tom Kurushingal    schedule 12.06.2015    source источник
comment
Проверьте решения в Вторичная ось с помощью twinx (): как добавить к легенда?   -  person ImportanceOfBeingErnest    schedule 29.07.2019


Ответы (1)


Проблема в том, что вы создаете две легенды. Вы получите лучшие результаты, используя только один. Для этого вам необходимо сохранить линейных художников:

l1, = plot.plot(time, pressure, label=r'\textit{Raw}')

# ...

l2, = ax2.plot(time, needle_lift, label=r'\textit{Needle lift}', color='#4DAF4A')

А затем вы можете использовать их для создания легенды, указав исполнителей и желаемые метки (вы также можете напрямую указать строки):

plt.legend((l1, l2), (l1.get_label(), l2.get_label()), loc='center left', 
        bbox_to_anchor=(1.2, 0.5))

Результат:

введите описание изображения здесь

person hitzg    schedule 12.06.2015