[英]matplotlib: customize the choice of colormap for a plotting function
因為有很多不同的colormap,我想在下面的function中設置一個參數作為colormap的名稱,讓用戶可以選擇自己喜歡的colormap,例如'viridis','plasma','winter','酷'等等。
def my_plot(cm_name):
# setup the normalization and the colormap
nValues = np.array(np.linspace(1, 50, 50))
normalize = mcolors.Normalize(vmin=nValues.min(), vmax=nValues.max())
colormap = cm.cm_name
# setup the colorbar
sm = cm.ScalarMappable(norm=normalize, cmap=colormap)
sm.set_array(nValues)
# below is the code for plotting
但是,當我如上所示定義繪圖 function 並調用my_plot(viridis)
時,會彈出一條錯誤消息:
NameError: name 'viridis' is not defined
誰能幫我這個? 謝謝!
顏色圖的名稱應該是一個string
,因此您需要像my_plot("viridis")
一樣調用它。 如果省略引號,python 認為viridis
是你要傳入的變量名,然后抱怨你沒有告訴它這個變量是什么。
您的 function 只能接受字符串作為參數,但cm.cm_name
是屬性。 您不能通過編寫cm.'viridis'
來訪問cm
的屬性viridis
。
這是getattr
的完美用例,它接受一個object和一個字符串,並返回名稱與傳遞給getattr
的字符串相同的 object 的屬性。
換行
colormap = cm.cm_name
至
colormap = getattr(cm, cm_name)
並使用代表顏色圖的字符串(不是變量)調用您的 function:
my_plot('viridis')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.