Как сделать цвет одного конца colorbar более темным в matplotlib? - PullRequest
0 голосов
/ 26 июня 2018

Скажем, у меня есть следующий график:

import numpy as np
import matplotlib.pyplot as plt    

np.random.seed(1)
data =  np.sort(np.random.rand(8,12))
plt.figure()
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='Blues', vmin=0.0, vmax=1.0)
plt.colorbar(c)
plt.show()

enter image description here

Цветная полоса имеет (почти) белый цвет, назначенный самым низким значениям.Как мне сделать его немного темнее?Я хочу, чтобы вместо цветовой шкалы от белого до синего она была от светло-синей до темно-синей.Например, цвет для значения 0 должен быть примерно таким, какой он есть для значения 0,4 на графике выше.

Я нашел это при поиске, но вопрос (иРешения) о том, чтобы сделать все цвета темнее, а это не то, что я ищу.

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Использование set_clim - это простой способ настроить цвета так, как вы, вероятно, хотите:

c.set_clim(-0.5, 1.0)

Это устанавливает ограничение цвета (первое значение vmin ивторой vmax).

https://matplotlib.org/api/_as_gen/matplotlib.pyplot.clim.html

0 голосов
/ 26 июня 2018

Хотя предложение @ user3483203 очень хорошо, вы все-таки интерполируете карту цветов.Вы можете избежать этого, сначала получив цветовую карту в виде матрицы цветов (на основе исходной интерполяции), а затем выберите часть этой матрицы в качестве своей новой цветовой карты:

import matplotlib as mpl

cmap = mpl.cm.Blues(np.linspace(0,1,20))
cmap = mpl.colors.ListedColormap(cmap[10:,:-1])

Ваш пример становится

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

cmap = mpl.cm.Blues(np.linspace(0,1,20))
cmap = mpl.colors.ListedColormap(cmap[10:,:-1])

np.random.seed(1)
data = np.sort(np.random.rand(8,12))

plt.figure()
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap=cmap, vmin=0.0, vmax=1.0)
plt.colorbar(c)
plt.show()

, который дает

enter image description here

, который в этом случае, вероятно, эквивалентен повторно интерполированной карте цветов, так как Blues происходит от некоторогоинтерполяция.

Для других цветовых карт результаты могут быть совсем другими.Например, для jet:

  • Нет новой интерполяции, а только подмножество исходной карты цветов (т. Е. Текущего решения):

    enter image description here

  • Использование повторной интерполяции (т. Е. Решение @ user3483203):

    enter image description here

0 голосов
/ 26 июня 2018

Просто определите свою собственную цветовую карту:

from matplotlib.colors import LinearSegmentedColormap

colors = [(0.6, 0.76, 0.98), (0, 0.21, 0.46)] # Experiment with this
cm = LinearSegmentedColormap.from_list('test', colors, N=10)

Затем просто подключите ее для параметра cmap:

import numpy as np
import matplotlib.pyplot as plt    

np.random.seed(1)
data =  np.sort(np.random.rand(8,12))
plt.figure()
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap=cm, vmin=0.0, vmax=1.0)
plt.colorbar(c)
plt.show()

И результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...