2016-06-18 3 views
25

Seaborn предлагает функцию color_palette, которая позволяет вам легко создавать новые color_palettes для сюжетов.seaborn color_palette as matplotlib colormap

colors = ["#67E568","#257F27","#08420D","#FFF000","#FFB62B","#E56124","#E53E30","#7F2353","#F911FF","#9F8CA6"] 

color_palette = sns.color_palette(colors) 

Я хочу, чтобы преобразовать color_palette к CMAP, который я могу использовать в Matplotlib, но я не понимаю, как я могу это сделать.

К сожалению, функции, подобные «cubehelix_palette», «light_palette», ... имеют параметр «as_cmap». «color_palette», к сожалению, нет.

ответ

20

Вы должны преобразовать список цветов из палитры Сиборна цветовой карты matplolib (ТНХ в @RafaelLopes для предложенных изменений):

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 
from matplotlib.colors import ListedColormap 

# construct cmap 
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"] 
my_cmap = ListedColormap(sns.color_palette(flatui).as_hex()) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

+2

Поправьте меня, если я ошибаюсь, но это не выглядит как трансформация Сиборна color_palette к Matplotlib CMAP, это выглядит как альтернативное решение о том, как сделать цветовую палитру с Matplotlib. Если я удалю sns.set_palette (flatui) с вашего кода ничего не меняется. Тем не менее, спасибо за демонстрацию этой функциональности matplotlib. – Corrumpo

+1

Это правильный ответ с точки зрения функциональности, но, пожалуйста, не используйте дискретные наборы цветов для отображения непрерывно изменяющихся данных, это очень вводит в заблуждение. – mwaskom

+2

На основе этого ответа @Corrumpo вы используете код 'cmap = ListedColormap (sns.color_palette(). As_hex())' – RafaelLopes

10

Большинства Сиборна методов для создания цветовых палитр есть необязательный аргумент as_cmap, который по умолчанию равен False. Вы можете использовать непосредственно получить цветовую палитру Matplotlib:

import seaborn as sns 
import matplotlib.pylab as plt 
import numpy as np 

# construct cmap 
my_cmap = sns.light_palette("Navy", as_cmap=True) 

N = 500 
data1 = np.random.randn(N) 
data2 = np.random.randn(N) 
colors = np.linspace(0,1,N) 
plt.scatter(data1, data2, c=colors, cmap=my_cmap) 
plt.colorbar() 
plt.show() 

enter image description here

6

Первый ответ как-то правильно, но слишком долго с большим количеством ненужной информации. Правильный и короткий ответ:

Чтобы преобразовать любой sns.color_palette() к совместимому CMAP Matplotlib вам нужны две строки кода

from matplotlib.colors import ListedColormap 
cmap = ListedColormap(sns.color_palette()) 
4

Просто дополнительный наконечник - если один хочет непрерывный Colorbar/палитру, добавив 256 в количество цветов, требуемых от Seaborn colorscheme, очень помогает.

cmap = ListedColormap(sns.color_palette("Spectral",256)) 
Смежные вопросы