Почему цветовой цикл оси уменьшается до одного цвета при установке какого-либо другого цикла свойств? - PullRequest
0 голосов
/ 04 сентября 2018

В python / matplotlib:

Когда я устанавливаю цикл свойств «маркер» (например), цветовой цикл просто дает постоянный (синий) цвет. Смотрите пример ниже.

from matplotlib import pyplot as plt
import numpy as np

fig, (ax1,ax2) = plt.subplots(nrows=2)

ax1.set_prop_cycle(marker=['o','s','x','+','*'])

xx = np.arange(10)
for n in xx:
  ax1.plot(xx, n*xx)
  ax2.plot(xx, n*xx)

plt.show()

Результат: screenshot

Как я могу получить цветовой цикл, чтобы остался каким он был, как на 2-й оси?

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Свойство cycler может включать в себя различные свойства, такие как цвет, маркер, стиль линии и т. Д. При установке свойства cycler с помощью ax1.set_prop_cycle(marker=[...]) вы создаете новое свойство cycler, которое содержит только свойство маркера, но не имеет цвета.

Чтобы иметь свойство цвета маркера и , необходимо либо установить оба параметра, либо расширить текущее свойство цикла по свойству, которое вы хотите изменить. Последнее будет показано в следующем.

from matplotlib import pyplot as plt
import numpy as np

fig, (ax1,ax2) = plt.subplots(nrows=2)

cycler = plt.rcParams["axes.prop_cycle"]
cycler += plt.cycler(marker=['o','s','x','+','*'])
ax1.set_prop_cycle(cycler)


colors = plt.rcParams["axes.prop_cycle"].by_key()["color"]
cycler2 = plt.cycler(color=colors)
cycler2 *= plt.cycler(marker=['o','s','x','+','*'])
ax2.set_prop_cycle(cycler2)

xx = np.arange(10)
for n in xx:
  ax1.plot(xx, n*xx)
  ax2.plot(xx, n*xx)

plt.show()

enter image description here

Обратите внимание на разницу между сложением и умножением.

0 голосов
/ 04 сентября 2018

Вы можете извлечь color_cycle с помощью rcParams и назначить их в качестве цветов для ax1 как (matplotlib версия 2.0.2)

 ax1.set_prop_cycle(marker=['o','s','x','+','*'], color=plt.rcParams['axes.color_cycle'])

Цвета могут отличаться на вашем компьютере, но они будут одинаковыми на обоих графиках.

РЕДАКТИРОВАТЬ (предложение @ ImportanceOfBeingEarnest в комментариях) в случае предупреждения об износе

ax1.set_prop_cycle(marker=['o','s','x','+','*'], color=plt.rcParams["axes.prop_cycle"].by_key()["color"][:5])

выход

enter image description here

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