Определить индивидуальную цветовую палитру морского дна?

Я пытаюсь создать цветовую палитру, чтобы устранить неоднозначность большого количества столбцов, расположенных друг над другом. Когда я использую любую из дискретных цветовых палитр (например, muted), цвета повторяются, а когда я использую любую из непрерывных цветовых карт (например, cubehelix), цвета переходят вместе.

Использование muted:  введите описание изображения здесь

Использование cubehelix:  введите описание изображения здесь

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

Любая помощь очень ценится.


person Jonathan Simon    schedule 04.11.2018    source источник


Ответы (1)


Matplotlib предоставляет палитру tab20, которая может здесь подойти.

Также вы можете взять цвета из существующей палитры и изменить их порядок.

Два инструмента, которые позволят получить список из n различных цветов:

Сравнивая эти три варианта:

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["axes.xmargin"] = 0
plt.rcParams["axes.ymargin"] = 0

# Take the colors of an existing categorical map
colors1 = plt.cm.tab20.colors

# Take the randomized colors of a continuous map
inx = np.linspace(0,1,20)
np.random.shuffle(inx)
colors2 = plt.cm.nipy_spectral(inx)

# Take a list of custom colors
colors3 = ["#9d6d00", "#903ee0", "#11dc79", "#f568ff", "#419500", "#013fb0", 
          "#f2b64c", "#007ae4", "#ff905a", "#33d3e3", "#9e003a", "#019085", 
          "#950065", "#afc98f", "#ff9bfa", "#83221d", "#01668a", "#ff7c7c", 
          "#643561", "#75608a"]

fig = plt.figure()
x = np.arange(10)
y = np.random.rand(20, 10)+0.2
y /= y.sum(axis=0)

for i, colors in enumerate([colors1, colors2, colors3]):
    with plt.style.context({"axes.prop_cycle" : plt.cycler("color", colors)}):
        ax = fig.add_subplot(1,3,i+1)
        ax.stackplot(x,y)
plt.show()

введите описание изображения здесь

person ImportanceOfBeingErnest    schedule 04.11.2018