[英]Scatter plot and Color mapping in Python
我有一系列點 x 和 y 存儲在 numpy 數組中。 那些代表 x(t) 和 y(t) 其中 t=0...T-1
我正在繪制散點圖
import matplotlib.pyplot as plt
plt.scatter(x,y)
plt.show()
我想要一個表示時間的顏色圖(因此根據 numpy 數組中的索引為點着色)
最簡單的方法是什么?
這是一個例子
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(100)
y = np.random.rand(100)
t = np.arange(100)
plt.scatter(x, y, c=t)
plt.show()
在這里,您將根據索引t
設置顏色,它只是一個[1, 2, ..., 100]
數組。
也許一個更容易理解的例子是稍微簡單的
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()
請注意,您作為c
傳遞的數組不需要具有任何特定的順序或類型,即不需要像這些示例中那樣排序或整數。 繪圖例程將縮放顏色圖,以便c
中的最小值/最大值對應於顏色圖的底部/頂部。
您可以通過添加更改顏色圖
import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)
導入matplotlib.cm
是可選的,因為您也可以將顏色圖稱為cmap="cmap_name"
。 有一個顏色圖的 參考頁面,顯示了每個顏色圖的樣子。 還知道您可以通過簡單地將其稱為cmap_name_r
來反轉顏色cmap_name_r
。 所以要么
plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")
將工作。 示例是"jet_r"
或cm.plasma_r
。 這是新的 1.5 顏色圖 viridis 的示例:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()
您可以使用添加顏色條
plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()
請注意,如果您明確使用圖形和子圖(例如fig, ax = plt.subplots()
或ax = fig.add_subplot(111)
),添加ax = fig.add_subplot(111)
可能會更復雜一些。 可以在此處找到單個子圖 colorbar和2 個子圖 1 colorbar 的好示例。
要添加到上面 wflynny 的答案,您可以在 此處找到可用的顏色圖
例子:
import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)
或者,
plt.scatter(x, y, c=t, cmap='jet')
子圖顏色條
對於散點圖,您可以在輔助圖形的幫助下構建“可映射”,然后將其添加到原始圖中,從而將顏色條欺騙到軸上。
作為上面例子的延續:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)
# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')
# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()
請注意,您還將輸出一個可以忽略的輔助數字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.