Python matplotlib 應用 – 散佈圖(有color bar)

應用篇

這次要介紹如何在散佈圖中製作color bar。

製作有color bar的散佈圖

之前說明過,如何在散佈圖中製作不同顏色,不同形狀的點。這次要介紹的是如何給有連續數量的點上色,並且製作color bar。首先我們來看看執行結果。

接著我們來看看代碼。cm是指定colormap顏色的部分。另外,在scatter的部分指定cmap的話就會製作出colormap。

import matplotlib.pyplot as plt

# data x, y
x = range(15)
y = range(15)

# 點(x, y)的大小
z = range(15)

# colormap
cm = plt.cm.get_cmap('RdYlBu')

# generate figure
fig = plt.figure()

# 設定ax
ax = fig.add_subplot(1, 1, 1)

# 利用ax畫散佈圖
mappable = ax.scatter(x, y, c=z, vmin=0, vmax=15, s=25, cmap=cm)

# colorbar
fig.colorbar(mappable, ax=ax)

# show
plt.show()

matplotlib的colormap

colormap是顯示點的大小與顏色的對應關係的工具。在matplotlib中有許多可以指定的cmap,只要在這邊指定Object就可以根據數值的大小來決定顏色。

製作colormap

首現,在製作colormap的時候我們會用到下面的get_cmap。

cm = plt.cm.get_cmap('RdYlBu')

這邊我們使用了’RdYlBu’的顏色,這是從紅色~藍色變化的colormap。當然除了這個顏色分佈以外還有許多種顏色。例如當我們把’RdYlBu’換成了PiYG的話就會變成下面的顏色。

詳細的顏色的話可以參考下面的連結。

https://matplotlib.org/3.1.3/tutorials/colors/colormaps.html

Colormap的範圍

當我們指定vmax和vmin的時候,colormap的顏色會適當的分割成vmax~vmin的範圍大小。下面是引用剛剛的連結的colormap的對應圖。

最後要說明一個稍微比較複雜的東西。我們在製作有colormap的散佈圖時,點的顏色會根據vmax以及vmin的範圍來決定,我們上面的範例代碼中的散佈圖的點的大小是分布於0~15,如果將這些點點在範圍是0~100的colormap上的話就會出現下面的問題。

mappable = ax.scatter(x, y, c=z, vmin=0, vmax=100, s=25, cmap=cm)

我們可以看到所有的點的顏色都偏向於紅色。因此,通常我們在製作有colormap的散佈圖時不需要指定vmin跟vmax,第一張圖是為了更好的呈現colormap的功能才特別指定的。

留言