解讀matplotlib和seaborn顏色圖(colormap)和調(diào)色板(color palette)
顏色圖或調(diào)色板是指一系列的有規(guī)律的顏色的集合,可以區(qū)分不同類(lèi)型的離散數(shù)據(jù)或不同值的連續(xù)數(shù)據(jù)。
一般在matplotlib中稱(chēng)為colormap(在繪圖函數(shù)中的關(guān)鍵字為cmap),在seaborn中一般稱(chēng)為color palette(在繪圖函數(shù)中的關(guān)鍵字為palette)。
由于seaborn是基于matplotlib開(kāi)發(fā)的,因此matplotlib中的各類(lèi)colormap一般seaborn均支持。
為統(tǒng)一起見(jiàn),下文統(tǒng)稱(chēng)為palette或調(diào)色板。
調(diào)色板一般分為三類(lèi):
- 離散型(qualitative):用來(lái)表示沒(méi)有順序關(guān)系的不同數(shù)據(jù)連續(xù)型
- (sequential):用來(lái)表示有序關(guān)系的連續(xù)數(shù)據(jù)連續(xù)雙邊型
- (diverging):類(lèi)似連續(xù)型,但數(shù)據(jù)的分布會(huì)跨越一個(gè)中間點(diǎn)(一般為0),在表示數(shù)據(jù)的特征時(shí)用來(lái)強(qiáng)調(diào)值在兩端的數(shù)據(jù),弱化值在中間的數(shù)據(jù)
下文分別列出各類(lèi)常用的調(diào)色板若干。
import seaborn as sns
離散型
seaborn庫(kù)自帶的調(diào)色板
sns.color_palette()

seaborn除了默認(rèn)的調(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,基于人的視覺(jué)特點(diǎn)對(duì)顏色進(jìn)行了修正
其它調(diào)色板
主要是matplotlib庫(kù)自帶的調(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ù)值跨度;名稱(chēng)后面加”_r"表示翻轉(zhuǎn)。
同時(shí)也支持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";名稱(chēng)后面加"_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é)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python雙端隊(duì)列實(shí)現(xiàn)回文檢測(cè)
雙端隊(duì)列 Deque 是一種有次序的數(shù)據(jù)集,跟隊(duì)列相似,其兩端可以稱(chēng)作"首" 和 "尾"端。這篇文章將通過(guò)雙端隊(duì)列實(shí)現(xiàn)回文檢測(cè),感興趣的可以學(xué)習(xí)一下2022-01-01
Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮
這篇文章主要為大家詳細(xì)介紹了Python使用Tkinter實(shí)現(xiàn)機(jī)器人走迷宮,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
pytorch 運(yùn)行一段時(shí)間后出現(xiàn)GPU OOM的問(wèn)題
這篇文章主要介紹了pytorch 運(yùn)行一段時(shí)間后出現(xiàn)GPU OOM的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
Python+PyQt5實(shí)現(xiàn)MySQL數(shù)據(jù)庫(kù)備份神器
在數(shù)據(jù)庫(kù)管理工作中,定期備份是確保數(shù)據(jù)安全的重要措施,本文將介紹如何使用Python+PyQt5開(kāi)發(fā)一個(gè)高顏值,多功能的MySQL數(shù)據(jù)庫(kù)備份工具,有需要的可以了解下2025-05-05
Python實(shí)現(xiàn)去除代碼前行號(hào)的方法
這篇文章主要介紹了Python實(shí)現(xiàn)去除代碼前行號(hào)的方法,實(shí)例分析了Python操作字符的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03
Django實(shí)戰(zhàn)之用戶認(rèn)證(初始配置)
這篇文章主要介紹了Django實(shí)戰(zhàn)之用戶認(rèn)證(初始配置),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
python+selenium+chromedriver實(shí)現(xiàn)爬蟲(chóng)示例代碼
這篇文章主要介紹了python+selenium+chromedriver實(shí)現(xiàn)爬蟲(chóng)示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

