Добавление метки оси Y ко вторичной оси Y в matplotlib

119

Я могу добавить метку y к левой оси y, используя plt.ylabel, но как я могу добавить ее на вторичную ось y?

table = sql.read_frame(query,connection)

table[0].plot(color=colors[0],ylim=(0,100))
table[1].plot(secondary_y=True,color=colors[1])
plt.ylabel('$')
Осмонд Бишоп
источник

Ответы:

235

Лучший способ - axesнапрямую взаимодействовать с объектом

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 10, 0.1)
y1 = 0.05 * x**2
y2 = -1 *y1

fig, ax1 = plt.subplots()

ax2 = ax1.twinx()
ax1.plot(x, y1, 'g-')
ax2.plot(x, y2, 'b-')

ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
ax2.set_ylabel('Y2 data', color='b')

plt.show()

пример графика

Пол Х
источник
Как получить правую ось Y, как левую, я имею в виду, снизу вверх, от 0 до 5, выровненную.
Sigur
Как повернуть синий текст, не перекрывая галочки?
Sigur
@Sigur, вам нужно возиться с передачей параметра horizontalalignment и / или verticalalignment в ax2.set_ylabel
Paul H
@PaulH, я обнаружил, что мы можем получить пределы y от ax1 и установить его на ax2, поэтому положение меток будет выровнено.
Sigur
@Sigur Я не слежу за тем, как лимиты осей и отметки взаимодействуют с ротацией меток, но если вы счастливы, удачи
Пол Х
22

Существует простое решение, не связанное с matplotlib: просто pandas.

Настройка исходного примера:

table = sql.read_frame(query,connection)

ax = table[0].plot(color=colors[0],ylim=(0,100))
ax2 = table[1].plot(secondary_y=True,color=colors[1], ax=ax)

ax.set_ylabel('Left axes label')
ax2.set_ylabel('Right axes label')

В основном, когда secondary_y=Trueзадана опция (хотя ax=axи передана), pandas.plotвозвращаются другие оси, которые мы используем для установки меток.

Я знаю, что на этот вопрос давным-давно ответили, но я думаю, что такой подход того стоит.

Кирил
источник
Спасибо - отличный подход! Однако стоит отметить, что это работает только в том случае, если вы сначала рисуете по первичной оси Y, а затем по вторичной оси Y, точно так же, как вы это сделали. Если вы измените порядок, он плохо себя ведет.
user667489
7

У меня сейчас нет доступа к Python, но я не знаю:

fig = plt.figure()

axes1 = fig.add_subplot(111)
# set props for left y-axis here

axes2 = axes1.twinx()   # mirror them
axes2.set_ylabel(...)
Micke
источник