matplotlibcolormap的應用全解析

一、colormap的基礎概念

在matplotlib中,colormap(顏色映射)是一個非常重要的概念,它是一系列顏色的集合,可以將數據映射為顏色。在matplotlib中,通過調用函數plt.cm.get_cmap()可以得到colormap對象。Matplotlib中的所有colormap都可以被抽象成一個名為matplotlib.colors.Colormap的類。其中plt.cm.get_cmap()返回的是一個colormap,類型為matplotlib.colors.ListedColormap。

通常,colormap會被應用在某些無法直接觀察的數據上,比如通過某些物理或數學模型得到的數據。使用colormap,可以將數據轉化為顏色信息,從而方便用戶觀察數據的規律。colormap可以用於色彩漸變的表達,如黑白灰度圖、彩虹圖等,可視化數據最為常用的方式是ColorMap和ColorBar。

下面是一個簡單的繪製Colormap的示例:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 1000)
y = np.sin(x)

plt.figure()
plt.plot(x, y, color=plt.cm.get_cmap('viridis')(0.5))
plt.show()

在上述代碼中,我們使用了viridis這個colormap,將sin函數繪製出來,並映射為顏色信息。其中,viridis是matplotlib庫中的一個colormap,用來表示從深色到亮色的顏色漸變。我們調用函數plt.cm.get_cmap(‘viridis’)可以得到一個顏色漸變對象,x軸上的點的顏色就是由這個顏色漸變對象提供的。

二、colormap的典型類型

1. 離散映射 colormap

離散映射colormap表示顏色被分成了幾個不同的區域,每個區域都分配了固定的顏色。這種映射是一種非常常見的方式,可以讓人們更快速和準確地理解數據的分布情況。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 20)
y = np.linspace(0, 2 * np.pi, 20).reshape(-1, 1)
data = np.sin(x) + np.cos(y)

plt.figure()
plt.pcolor(data, cmap=plt.cm.get_cmap('Blues', 6))
plt.colorbar()
plt.show()

在上述代碼中,我們使用函數plt.pcolor()將離散數據繪製為顏色塊。其中,我們指定了colormap為Blues,並且將顏色分成了6份。在使用plt.colorbar()函數時,我們可以看到顏色條上標註了6個不同顏色。

2. 連續映射 colormap

連續映射colormap通常是一條連續漸變的顏色條,顏色的深淺代表數據值的不同。通過查看顏色條,用戶可以快速了解數據分布情況。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 1000)
y = np.sin(x)

plt.figure()
plt.plot(x, y, color=plt.cm.get_cmap('plasma')(0.5))
plt.colorbar()
plt.show()

在上述代碼中,我們使用函數plt.plot()將連續的sin函數繪製為顏色塊。我們指定了colormap為plasma,並將sin函數某一位置的顏色設置為0.5。在使用plt.colorbar()函數時,我們可以看到顏色條上顏色的連續漸變,代表了sin函數的連續變化。

3. 均勻型 colormap

均勻型colormap通常會將使用者指定的顏色均勻地分配給colormap上的不同位置。這種colormap非常適合數據分段顯示的場景。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,2*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(x-np.pi/2)
y3 = np.sin(x-np.pi)
y4 = np.sin(x-np.pi*3/2)
y5 = np.sin(x-np.pi*2)
color = ['#00008B', '#B8860B', '#708090', '#FFD700', '#8B0000']

plt.figure()
plt.plot(x, y1, color=color[0], label='y=sin(x)')
plt.plot(x, y2, color=color[1], label='y=sin(x-pi/2)')
plt.plot(x, y3, color=color[2], label='y=sin(x-pi)')
plt.plot(x, y4, color=color[3], label='y=sin(x-3pi/2)')
plt.plot(x, y5, color=color[4], label='y=sin(x-2pi)')
plt.legend(loc='lower left')
plt.show()

在上述代碼中,我們使用函數plt.plot()將五條sin函數曲線繪製出來,我們指定了它們的顏色,使用向量color存儲了五種顏色。其中,每種顏色都均勻地分配給了五條sin函數曲線的不同位置。

三、colormap的應用實例

1. 2D heatmap

2D heatmap通常會將colormap應用在比較大的數據集上,通常表示矩陣數據的密集程度。

import matplotlib.pyplot as plt
import numpy as np

data = np.random.rand(4, 6) * 4

plt.figure()
plt.imshow(data, cmap='YlGn')
plt.colorbar()
plt.show()

在上述代碼中,我們使用函數plt.imshow()將隨機生成的4\*6的數據繪製為heatmap。我們指定了colormap為YlGn,並使用plt.colorbar()將顏色條添加到圖像中。

2. 3D圖形中的colormap

colormap可以被應用於3D圖形中,幫助用戶快速了解數據中三維變量的變化。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x = np.random.standard_normal(100)
y = np.random.standard_normal(100)
z = np.random.standard_normal(100)

sc = ax.scatter(x, y, z, c=z, s=50, cmap='Blues')
plt.colorbar(sc)
plt.show()

在上述代碼中,我們使用函數ax.scatter()將三個100個隨機數序列分別繪製在了三個坐標軸上。我們指定了顏色參數為z,即z軸的數據。將顏色參數設置為z的原因是,我們希望顏色隨着z軸的變化而發生變化。我們使用參數cmap=’Blues’指定colormap為Blues,並使用plt.colorbar()添加了顏色條到圖像中。

3. 帶多個坐標軸的colormap

某些場景下,我們可能需要在同一個圖像中繪製帶有多個坐標軸的colormap。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import make_axes_locatable

fig, ax = plt.subplots()

x, y = np.meshgrid(np.arange(0, 2 * np.pi, 0.1),
                   np.arange(0, 2 * np.pi, 0.1))
z = (np.sin(x) * np.cos(y))

im = ax.imshow(z)
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(im, cax=cax)

ax2 = ax.twinx()
ax2.plot(np.sin(x), color='r')
plt.show()

在上述代碼中,我們使用函數ax.imshow()將生成的數據繪製為圖像。在添加顏色條時,我們使用了mpl_toolkits.axes_grid1模塊中的make_axes_locatable()函數創建了一個axis locator對象,並以此創建了一個新的軸,cax。將顏色條的位置設置在了圖像的右邊。

在同一個圖像中,我們還繪製了另一個ax2軸,plot了一個sin函數。可以看到,兩個軸之間並不發生重疊,可以同時顯示。

四、conclusion

本文對matplotlibcolormap做了全方位的介紹,包括colormap的概念、colormap的類型和colormap的應用實例。希望讀者通過本文的介紹,能夠熟練掌握matplotlib中colormap的使用方法,突破數據可視化的瓶頸。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/269868.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:34
下一篇 2024-12-16 13:34

發表回復

登錄後才能評論