2017-06-21 224 views
0

我在循環內生成一些數據,並將它們繪製爲輪廓圖。每個繪圖應該使用相同的色彩圖和指定數量的等值線。另外,第一級顏色應該是白色的。matplotlib中的輪廓不會繪製輪廓的指定數量

通過下面的代碼片段生成的身影酷似我面對此刻的問題:

import numpy as np 
import matplotlib.pyplot as plt 

x = y = np.linspace(-3, 3, 200) 
data = 1800*np.exp(-(x[newaxis, :].T**2 + y**2)) 

plt.figure(1000) 
plt.clf() 

plt.contourf(x, y, data, 8, cmap=plt.cm.OrRd) 
plt.axes().set_aspect("equal") 
plt.colorbar() 
plt.contour(x, y, data, 8, colors='k') 

enter image description here

有9和我注意到,似乎取決於分鐘沒有8線級別/數據的最大值。因此,自從數據發生變化後,在我的循環中生成的圖形中輪廓級別的數目不相同。我可以使用哪個色彩地圖,以便第一層是白色的?我知道那裏有許多關於色彩映射的問題。但他們傾向於手動生成色彩圖。我只是想使用這個現有的一個,並添加白色作爲第一種顏色或以某種方式修改我的腳本,以便它確實以白色開始(我認爲這將是無論如何)。

回答

1

輪廓(f)中的levels自變量指定了層數。即對於等值線圖,這是您獲得的線數,對於contourf圖,這比不同顏色區域的數量少一個。例如,如果您採用單一級別,則會顯示一行和兩個彩色區域。

enter image description here

爲了獲得白色作爲第一個顏色,你需要選擇實際上具有白色作爲第一顏色的顏色表(注意:OrRd沒有在它白色)。查看colormap reference,這樣的地圖將例如是反轉的afmhot。當然,你也可以建立你的自定義地圖,它具有白色作爲第一種顏色。 從色彩地圖中選擇相應範圍的顏色,使其從色階之間的間隔中間取得顏色。即使是第一級,這也會導致非白色。爲了克服這個問題,可以選擇從給定的顏色映射中生成顏色爲N+1的顏色映射,以使顏色在該間隔內保持不變,並且平均值仍然與起始顏色相同。

levels = 8 
cmap= plt.cm.get_cmap("afmhot_r", levels+1) 
plt.contourf(x, y, data, levels, cmap=cmap) 

生產:

enter image description here