Как выбрать новый цвет для каждой построенной линии внутри фигуры в matplotlib?

Я бы НЕ хотел указывать цвет для каждой построенной линии, и чтобы каждая строка получала отчетливый цвет. Но если я запустил:

from matplotlib import pyplot as plt
for i in range(20):
    plt.plot([0, 1], [i, i])

plt.show()

, то получу такой результат:

Image of the graph output by the code above

Если вы посмотрите на изображение выше, вы увидите, что matplotlib пытается выбрать цвета для каждой строки, которые отличаются, но в конечном итоге он повторно использует цвета - Первые десять строк используют те же цвета, что и нижние десять. Я просто хочу, чтобы он не повторял уже использованные цвета И / ИЛИ подавал ему список используемых цветов.

88
задан Mark Amery 17 November 2019 в 16:08
поделиться

1 ответ

Как ответ Ciro примечания, можно использовать prop_cycle для установки списка цветов для matplotlib для циклического повторения через. Но сколько цветов? Что, если Вы хотите использовать тот же цветной цикл для большого количества графиков с различными числами строк?

Одна тактика должна была бы использовать формулу как та от https://gamedev.stackexchange.com/a/46469/22397, для генерации бесконечной последовательности цветов, где каждый цвет пытается существенно отличаться от всех те, которые предшествовали ему.

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

Пример:

from matplotlib import pyplot as plt
from matplotlib.colors import hsv_to_rgb
from cycler import cycler

# 1000 distinct colors:
colors = [hsv_to_rgb([(i * 0.618033988749895) % 1.0, 1, 1])
          for i in range(1000)]
plt.rc('axes', prop_cycle=(cycler('color', colors)))

for i in range(20):
    plt.plot([1, 0], [i, i])

plt.show()

Вывод:

Graph output by the code above

Теперь, все цвета отличаются - хотя я признаю, что изо всех сил пытаюсь отличить несколько из них!

0
ответ дан 24 November 2019 в 07:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: