Я бы НЕ хотел указывать цвет для каждой построенной линии, и чтобы каждая строка получала отчетливый цвет. Но если я запустил:
from matplotlib import pyplot as plt
for i in range(20):
plt.plot([0, 1], [i, i])
plt.show()
, то получу такой результат:
Если вы посмотрите на изображение выше, вы увидите, что matplotlib пытается выбрать цвета для каждой строки, которые отличаются, но в конечном итоге он повторно использует цвета - Первые десять строк используют те же цвета, что и нижние десять. Я просто хочу, чтобы он не повторял уже использованные цвета И / ИЛИ подавал ему список используемых цветов.
Как ответ 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()
Вывод:
Теперь, все цвета отличаются - хотя я признаю, что изо всех сил пытаюсь отличить несколько из них!