Определить пользовательскую цветовую палитру Seaborn? - PullRequest
0 голосов
/ 04 ноября 2018

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

Использование muted: enter image description here

Использование cubehelix: enter image description here

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

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

1 Ответ

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

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()

enter image description here

...