簡體   English   中英

Python 中的散點圖和顏色映射

[英]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)可能會更復雜一些。 可以在此處找到單個子圖 colorbar2 個子圖 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()

使用 COLORBAR 散布子圖

請注意,您還將輸出一個可以忽略的輔助數字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM