解讀matplotlib和seaborn顏色圖(colormap)和調(diào)色板(color palette)
顏色圖或調(diào)色板是指一系列的有規(guī)律的顏色的集合,可以區(qū)分不同類型的離散數(shù)據(jù)或不同值的連續(xù)數(shù)據(jù)。
一般在matplotlib中稱為colormap(在繪圖函數(shù)中的關(guān)鍵字為cmap),在seaborn中一般稱為color palette(在繪圖函數(shù)中的關(guān)鍵字為palette)。
由于seaborn是基于matplotlib開發(fā)的,因此matplotlib中的各類colormap一般seaborn均支持。
為統(tǒng)一起見,下文統(tǒng)稱為palette或調(diào)色板。
調(diào)色板一般分為三類:
- 離散型(qualitative):用來表示沒有順序關(guān)系的不同數(shù)據(jù)連續(xù)型
- (sequential):用來表示有序關(guān)系的連續(xù)數(shù)據(jù)連續(xù)雙邊型
- (diverging):類似連續(xù)型,但數(shù)據(jù)的分布會跨越一個中間點(一般為0),在表示數(shù)據(jù)的特征時用來強調(diào)值在兩端的數(shù)據(jù),弱化值在中間的數(shù)據(jù)
下文分別列出各類常用的調(diào)色板若干。
import seaborn as sns
離散型
seaborn庫自帶的調(diào)色板
sns.color_palette()
seaborn除了默認的調(diào)色板外,自帶了"deep", “muted”, “pastel”, “bright”, “dark”, "colorblind"等6種調(diào)色板
sns.color_palette("deep")
pallettes = ["deep", "muted", "pastel", "bright", "dark", "colorblind"] data = np.array([sns.color_palette(pat) for pat in pallettes]) fig = plt.figure(figsize=(9,16)) ax = fig.add_subplot(111) ax.imshow(data) for i, pat in enumerate(pallettes): ax.text(-0.6, i, pat, ha="right") plt.axis("off");
# 示例 import numpy as np import pandas as pd import matplotlib.pyplot as plt col1 = ["A"]*5 + ["B"]*5 col2 = list("abcde")*2 val = np.random.rand(10) df = pd.DataFrame({"col1":col1, "col2":col2, "val":val}) df fig = plt.figure(figsize=(8,8)) fig.subplots_adjust(wspace=0.1, hspace=0.25) for i, palette in enumerate(["deep", "muted", "bright", "dark"]): ax = fig.add_subplot(2, 2, i+1) sns.barplot(x="col2", y="val", hue="col1", data=df, ax=ax, palette=palette) ax.set_title(palette)
自定義調(diào)色板
可利用hls(色相、亮度、飽和度)顏色空間自定義任意數(shù)量顏色的調(diào)色板
sns.color_palette("hls", 8)
sns.color_palette("hls", 16)
sns.color_palette("husl", 8) # husl相比hls,基于人的視覺特點對顏色進行了修正
其它調(diào)色板
主要是matplotlib庫自帶的調(diào)色板,有’Pastel1’, ‘Pastel2’, ‘Paired’, ‘Accent’,‘Dark2’, ‘Set1’, ‘Set2’, ‘Set3’, ‘tab10’, ‘tab20’, ‘tab20b’, 'tab20c’等
sns.color_palette("Set2")
sns.color_palette("tab10")
連續(xù)型
主要有"rocket", “mako”, “flare"和"crest”,其中"rocket", “mako"適合較大的數(shù)值跨度;名稱后面加”_r"表示翻轉(zhuǎn)。
同時也支持matploblib自帶的"magma"、"viridis"等。
也可用sns.cubehelix_palette函數(shù)自定義。
fig = plt.figure(figsize=(24,8)) fig.subplots_adjust(wspace=0.1, hspace=0.25) palettes = ["rocket", "mako", "flare", "crest", "magma", "viridis"] palettes += [pat+"_r" for pat in palettes] data = np.random.rand(10,10) for i, palette in enumerate(palettes): ax = fig.add_subplot(2, 6, i+1) sns.heatmap(data, cmap=palette) ax.set_title(palette)
連續(xù)雙邊型
主要有"vlag"和"icefire";以及matplotlib自帶的"Spectral"和"coolwarm";名稱后面加"_r"表示翻轉(zhuǎn)。
也可用sns.diverging_palette函數(shù)自定義
fig = plt.figure(figsize=(16,8)) fig.subplots_adjust(wspace=0.2, hspace=0.25) palettes = ["vlag", "icefire", "Spectral", "coolwarm"] palettes += [pat+"_r" for pat in palettes] data = np.random.rand(10,10)*2-1 for i, palette in enumerate(palettes): ax = fig.add_subplot(2, 4, i+1) sns.heatmap(data, cmap=palette) ax.set_title(palette)
參考
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
利用python Pandas實現(xiàn)批量拆分Excel與合并Excel
今天帶大家學(xué)習(xí)利用python Pandas實現(xiàn)批量拆分Excel與合并Excel,文中有非常詳細的的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05Python中tkinter無法同時顯示多個image的解決方法及pack與place解析
這篇文章主要介紹了Python中tkinter無法同時顯示多個image的解決方法及pack與place解析,本文給大家分享問題原因解析及解決方案,需要的朋友可以參考下2023-02-02python django 訪問靜態(tài)文件出現(xiàn)404或500錯誤
這篇文章主要介紹了python django 訪問靜態(tài)文件出現(xiàn)404或500錯誤的相關(guān)資料,需要的朋友可以參考下2017-01-01Pytorch 中net.train 和 net.eval的使用說明
這篇文章主要介紹了Pytorch 中net.train 和 net.eval的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法
這篇文章主要介紹了Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法,實例分析了Python亂碼的出現(xiàn)的原因與相應(yīng)的解決方法,需要的朋友可以參考下2015-04-04