2016-06-18 19 views
25

Seaborn cung cấp một chức năng gọi là color_palette, cho phép bạn dễ dàng tạo các color_palettes mới cho các ô.seaborn color_palette như matplotlib colormap

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

color_palette = sns.color_palette(colors) 

Tôi muốn chuyển đổi color_palette thành cmap, mà tôi có thể sử dụng trong matplotlib, nhưng tôi không thấy cách tôi có thể thực hiện việc này.

Đáng buồn là chỉ có các chức năng như "cubehelix_palette", "light_palette", ... có thông số "as_cmap". "color_palette" không, thật không may.

Trả lời

20

Bạn cần phải chuyển đổi một danh sách các màu sắc từ bảng màu sanh ở biển vào bản đồ màu sắc của matplolib (thx để @RafaelLopes cho những thay đổi được đề nghị):

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

Đúng, nếu tôi sai, nhưng điều này không giống như một biến đổi của color_palette bẩm sinh thành cmplotlib cmap, đây giống như giải pháp thay thế về cách tạo bản đồ màu với matplotlib. Nếu tôi xóa sns.set_palette (flatui) khỏi mã của bạn, không có gì thay đổi. Tuy nhiên cảm ơn bạn đã cho thấy chức năng matplotlib này. – Corrumpo

+1

Đây là câu trả lời đúng về mặt chức năng, nhưng vui lòng không sử dụng các bộ màu rời rạc để ánh xạ dữ liệu liên tục khác nhau, nó rất gây hiểu lầm. – mwaskom

+2

Dựa trên câu trả lời này @Corrumpo bạn sử dụng mã 'cmap = ListedColormap (sns.color_palette(). As_hex())' – RafaelLopes

10

phương pháp sanh ở biển nhất để tạo ra bảng màu có đối số tùy chọn as_cmap theo mặc định là False. Bạn có thể sử dụng để trực tiếp nhận được một bản đồ màu 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

Câu trả lời đầu tiên là bằng cách nào đó đúng nhưng cách quá dài với rất nhiều thông tin không cần thiết. Câu trả lời chính xác và ngắn gọn là:

Để chuyển đổi bất kỳ sns.color_palette() đến một CMAP tương thích matplotlib bạn cần hai dòng mã

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

Chỉ cần một mũi bổ sung - nếu ai muốn một colorbar liên tục/colormap, thêm 256 như số lượng màu được yêu cầu từ Seaborn colorscheme giúp rất nhiều.

cmap = ListedColormap(sns.color_palette("Spectral",256)) 
Các vấn đề liên quan