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

seaborn除了默認的調色板外,自帶了"deep", “muted”, “pastel”, “bright”, “dark”, "colorblind"等6種調色板
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)
自定義調色板
可利用hls(色相、亮度、飽和度)顏色空間自定義任意數(shù)量顏色的調色板
sns.color_palette("hls", 8)
sns.color_palette("hls", 16)
sns.color_palette("husl", 8) # husl相比hls,基于人的視覺特點對顏色進行了修正
其它調色板
主要是matplotlib庫自帶的調色板,有’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"表示翻轉。
同時也支持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"表示翻轉。
也可用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)
參考
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
利用python Pandas實現(xiàn)批量拆分Excel與合并Excel
今天帶大家學習利用python Pandas實現(xiàn)批量拆分Excel與合并Excel,文中有非常詳細的的代碼示例,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
Python中tkinter無法同時顯示多個image的解決方法及pack與place解析
這篇文章主要介紹了Python中tkinter無法同時顯示多個image的解決方法及pack與place解析,本文給大家分享問題原因解析及解決方案,需要的朋友可以參考下2023-02-02
python django 訪問靜態(tài)文件出現(xiàn)404或500錯誤
這篇文章主要介紹了python django 訪問靜態(tài)文件出現(xiàn)404或500錯誤的相關資料,需要的朋友可以參考下2017-01-01
Pytorch 中net.train 和 net.eval的使用說明
這篇文章主要介紹了Pytorch 中net.train 和 net.eval的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05
Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法
這篇文章主要介紹了Python遍歷zip文件輸出名稱時出現(xiàn)亂碼問題的解決方法,實例分析了Python亂碼的出現(xiàn)的原因與相應的解決方法,需要的朋友可以參考下2015-04-04

