Twinx / Secondary-y: не начинать с первого цвета - PullRequest
0 голосов
/ 05 июня 2018

У меня есть цветовая схема, которая приходит от

plt.style.use('ggplot')

, поэтому Я не хочу выбирать цвета вручную или выбирать их из цветового цикла .Тем не менее, когда у меня есть вторичная ось:

fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2]))
ax2.plot(np.array([3, 4]))

Она построит обе линии в одном цвете.Как мне сказать ax2, что на этом графике уже нарисованы n=1 линии, так что он начинается с n+1-го цвета?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Вы можете построить пустой список до ax2, прежде чем выводить на экран свои фактические данные.Это приводит к тому, что первый цвет в цикле используется для рисования несуществующей линии, переходя ко второму цвету для реальных данных.

plt.style.use("ggplot")
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2]))

ax2.plot([])  # Plotting nothing.

ax2.plot(np.array([2, 1]))

Plotting nothing to skip a colour

0 голосов
/ 20 мая 2019

Я думаю, что ручной вызов next() на prop_cycler, как предлагается в другом ответе , немного подвержен ошибкам, потому что его легко забыть.Чтобы автоматизировать процесс, вы можете сделать так, чтобы обе оси использовали один и тот же циклер:

ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler

Да, это все еще уродливый хак, поскольку он зависит от внутренних деталей реализации, а не от определенного интерфейса.Но при отсутствии официальной функции это, вероятно, самое надежное решение.Как видите, вы можете добавлять графики по двум осям в любом порядке, без ручного вмешательства.

Полный код:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')

fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax2._get_lines.prop_cycler = ax1._get_lines.prop_cycler

ax1.plot(np.array([1, 2, 3]))
ax2.plot(np.array([3, 5, 4]))
ax1.plot(np.array([0, 1, 3]))
ax2.plot(np.array([2, 4, 1]))

plt.show()

Example plot

0 голосов
/ 05 июня 2018

К сожалению, не существует «рекомендуемого» способа манипулирования состоянием цикла.См. Подробное обсуждение на Получить состояние цветового цикла matplotlib .

Однако вы можете получить доступ к текущему циклическому циклу и перейти к нему вручную.

next(ax2._get_lines.prop_cycler)

Полный код:

import matplotlib.pyplot as plt
import numpy as np

plt.style.use('ggplot')

fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.plot(np.array([1, 2, 3]))

next(ax2._get_lines.prop_cycler)
ax2.plot(np.array([3, 5,4]))

plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...