Сделать цветовую шкалу для чисел в словаре [Python] - PullRequest
0 голосов
/ 06 мая 2018

У меня есть словарь с разными значениями, например:

  colormap_coms=
  {0.10208554259455638: rgb(179, 56, 79), 0.0: rgb(121, 28, 149), 
  0.10870219813309245: rgb(44, 147, 200), 0.12623481073520415: rgb(78, 170, 
  98), 0.10298102981029811: rgb(150, 87, 91), 0.044263775971093045: rgb(223, 
  39, 33), 0.13340724316334074: rgb(194, 205, 92), 0.10034049058439304: 
  rgb(99, 41, 106), 0.08040984519434236: rgb(97, 51, 26), 
  0.008130081300813009: rgb(106, 148, 70), 0.07158437438032918: rgb(54, 159, 
  37)}

Я использовал эту функцию:

 colormap_coms = {x : 
 RGB(random.randrange(0,256),random.randrange(0,256),random.randrange(0,256)) 
                 for x in list(set(communities))}

Здесь у меня есть случайное назначение цвета, но я хочу назначить цветовую шкалу (например, от темного к светлому) на основе значений (от меньшего к большему).

Есть ли простой способ сделать это? Спасибо

1 Ответ

0 голосов
/ 06 мая 2018

RGB плохо подходит для создания плавных цветовых переходов, цветовое пространство Google HSV. Вы выбираете значение H ue, S и задаете переменную alue V , чтобы создать разные оттенки одного базового цвета.

Вы можете получить значения RGB из значений HSV следующим образом:

import colorsys

rgbs = []
for v in range(10000):
    val = v/10000.0
    # http://colorizer.org/   some light blue base color
    rgbs.append( colorsys.hsv_to_rgb(170/256.0,0.7,val))

print (rgbs)

(изменено с CoryKramer с ответом здесь )

Вы можете сопоставить этот список RGB с вашими значениями или просто поместить их в значение V HSV - вам может потребоваться некоторое масштабирование / нормализация ваших необработанных значений, чтобы распределить их по доступным цветовое пространство.


Вы также можете исправить любые другие 2: H или V, в этом случае оттенок или значение изменяются.

Создайте такое же отображение, как вы делаете для rbg, и вы должны установить:

coms= sorted([0.10208554259455638, 0.0, 0.10870219813309245,0.12623481073520415, 0.10298102981029811,0.44263775971093045,0.13340724316334074,0.10034049058439304,0.08040984519434236,0.008130081300813009,0.07158437438032918])

mycols = {}
part = 1.0 / len(coms)
for k in range(len(coms)): 
    mycols[colormap_coms[k]] = colorsys.hsv_to_rgb(170/256.0,0.7,k*part)

print(mycols)

Выход:

    {0.0: (0.0, 0.0, 0.0), 
     0.008130081300813009: (0.02727272727272728, 0.028267045454545465, 0.09090909090909091), 
     0.07158437438032918: (0.05454545454545456, 0.05653409090909093, 0.18181818181818182), 
     0.08040984519434236: (0.08181818181818182, 0.08480113636363638, 0.2727272727272727), 
     0.10034049058439304: (0.10909090909090911, 0.11306818181818186, 0.36363636363636365),
     0.10208554259455638: (0.1363636363636364, 0.14133522727272732, 0.4545454545454546), 
     0.10298102981029811: (0.16363636363636364, 0.16960227272727277, 0.5454545454545454), 
     0.10870219813309245: (0.19090909090909094, 0.19786931818181824, 0.6363636363636364), 
     0.12623481073520415: (0.21818181818181823, 0.22613636363636372, 0.7272727272727273), 
     0.13340724316334074: (0.2454545454545455, 0.2544034090909092, 0.8181818181818182), 
     0.44263775971093045: (0.2727272727272728, 0.28267045454545464, 0.9090909090909092)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...