一、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-tw/n/269868.html
微信掃一掃
支付寶掃一掃