Есть ли цветовая палитра для matplotlib? [Дубликат]

Хорошая цель с самого начала - основанная на характере вашего сайта, я нашел много ресурсов по этому поводу в Googling - вы, конечно, не первый в этом разбираетесь.

Предполагается, что у мистического PHP6 все это выпрямилось, правда?

Вы можете в значительной степени установить utf-8 в качестве глобальной кодировки по умолчанию для mysql на уровне сервера, и она по умолчанию будет правильно соответствовать более гранулированных уровней.

38
задан Trollbrot 30 May 2013 в 12:22
поделиться

3 ответа

Существует пример для создания пользовательских цветовых папок здесь . Докштрина необходима для понимания значения cdict. Как только вы получите это под своим поясом, вы можете использовать cdict следующим образом:

cdict = {'red':   ((0.0, 1.0, 1.0), 
                   (0.1, 1.0, 1.0),  # red 
                   (0.4, 1.0, 1.0),  # violet
                   (1.0, 0.0, 0.0)), # blue

         'green': ((0.0, 0.0, 0.0),
                   (1.0, 0.0, 0.0)),

         'blue':  ((0.0, 0.0, 0.0),
                   (0.1, 0.0, 0.0),  # red
                   (0.4, 1.0, 1.0),  # violet
                   (1.0, 1.0, 0.0))  # blue
          }

Хотя формат cdict дает вам большую гибкость, я нахожу для простых градиентов его формат, скорее неинтуитивный. Вот функция утилиты, которая помогает генерировать простые LinearSegmentedColormaps:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors


def make_colormap(seq):
    """Return a LinearSegmentedColormap
    seq: a sequence of floats and RGB-tuples. The floats should be increasing
    and in the interval (0,1).
    """
    seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
    cdict = {'red': [], 'green': [], 'blue': []}
    for i, item in enumerate(seq):
        if isinstance(item, float):
            r1, g1, b1 = seq[i - 1]
            r2, g2, b2 = seq[i + 1]
            cdict['red'].append([item, r1, r2])
            cdict['green'].append([item, g1, g2])
            cdict['blue'].append([item, b1, b2])
    return mcolors.LinearSegmentedColormap('CustomMap', cdict)


c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
    [c('red'), c('violet'), 0.33, c('violet'), c('blue'), 0.66, c('blue')])
N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(-2, 2, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()

enter image description here [/g1]


Кстати, for-loop

for i in range(0, len(array_dg)):
  plt.plot(array_dg[i], markers.next(),alpha=alpha[i], c=colors.next())

отображает одну точку для каждого вызова plt.plot. Это будет работать для небольшого количества очков, но во многих случаях будет очень медленным. plt.plot может рисовать только один цвет, но plt.scatter может назначать другой цвет для каждой точки. Таким образом, plt.scatter - это путь.

62
ответ дан unutbu 26 August 2018 в 19:40
поделиться

Если вы хотите автоматизировать создание настраиваемой расходящейся цветовой карты, обычно используемой для поверхностных графиков , этот модуль в сочетании с методом @unutbu работал хорошо для меня.

def diverge_map(high=(0.565, 0.392, 0.173), low=(0.094, 0.310, 0.635)):
    '''
    low and high are colors that will be used for the two
    ends of the spectrum. they can be either color strings
    or rgb color tuples
    '''
    c = mcolors.ColorConverter().to_rgb
    if isinstance(low, basestring): low = c(low)
    if isinstance(high, basestring): high = c(high)
    return make_colormap([low, c('white'), 0.5, c('white'), high])

Высокие и низкие значения могут быть либо строковыми именами цветов, либо кортежами rgb. Это результат использования демографической диаграммы : enter image description here [/g2]

11
ответ дан hitzg 26 August 2018 в 19:40
поделиться

Поскольку методы, используемые в других ответах, кажутся довольно сложными для такой простой задачи, вот новый ответ:

Вместо ListedColormap, который создает дискретную цветовую палитру , вы можете использовать LinearSegmentedColormap. Это можно легко создать из списка, используя метод from_list.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors

x,y,c = zip(*np.random.rand(30,3)*4-2)

cmap = matplotlib.colors.LinearSegmentedColormap.from_list("", ["red","violet","blue"])

norm=plt.Normalize(-2,2)
plt.scatter(x,y,c=c, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()

14
ответ дан ImportanceOfBeingErnest 26 August 2018 в 19:40
поделиться
Другие вопросы по тегам:

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