[英]Matplotlib: Indexing color map
我有一個3-d圖,但是我的16個數據點中有4個具有來自某一分量的無效數據(即,一個向量具有良好的x和y數據,但具有不良的z數據)。 我可以完全忽略這些點,但隨后我會刪除良好的數據(沿x和y方向)。 理想情況下,我希望能夠將丟失數據的顏色更改為一種標記,以便仍對其進行打印,但是我可以判斷出丟失數據的顏色。
我對顏色圖的經驗很少,尤其是在3D模式中。 我試過采用以下解決方案: (python)使用colormap作為第4維繪制xd,y,z函數的3d曲面 使用matplotlib創建自己的colormap並繪制色標 ,這似乎是最有用的: 將顏色添加到3d matplotlib中的顫動圖,但我只想讓它們都具有相同的顏色,只是非常特定的數據點,而且我不確定如何索引顏色圖。
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D
def main():
data = [[ 1.52940323e-06, 3.30263460e-07, 1.23333738e-02],
[ 0.00062357, -0.00061659, -0.21386033],
[-0.00028384, 0.00088403, -0.21165629],
[ 0.00225299, 0.00180132, -0.1964095 ],
[-0.00066298, 0.00271399, -0.23091235],
[ 0.00054687, -0.00063866, -0.24299 ],
[ 0.00170783, -0.00140304, -0.09094558],
[-0.00378669, -0.00592137, -0.07358853],
[ 5.84581114e-07, -3.58723162e-07, -3.08931350e-02],
[ 0.0003522 , -0.00067592, -0.23933634],
[ -5.84077540e-07, 2.08945622e-07, -4.31579608e-02],
[-0.00196888, 0.00261409, -0.28115362],
[ -1.65606166e-04, 1.89755530e-01, -1.49510581e-02],
[-0.00048166, 0.00095946, -0.26929835],
[ 8.26054997e-04, -7.75840354e-05, -3.05118605e-01],
[ 0.0018271 , 0.00078126, -0.18526635]]
fig = plt.figure()
ax = Axes3D(fig)
x = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
y = [-0.002, -0.002, -0.002, -0.002, -0.001, -0.001, -0.001, -0.001,
0.001, 0.001, 0.001, 0.001, 0.002, 0.002, 0.002, 0.002]
z = [-0.0022500000000000003, -0.00075, 0.00075, 0.0022500000000000003,
-0.0022500000000000003, -0.00075, 0.00075, 0.0022500000000000003,
-0.0022500000000000003, -0.00075, 0.00075, 0.0022500000000000003,
-0.0022500000000000003, -0.00075, 0.00075, 0.0022500000000000003]
# data[0]= [0]*3
# data[8]= [0]*3
# data[10]= [0]*3
# data[12]= [0]*3
u = [data[i][0] for i in range(len(data))]
v = [data[i][1] for i in range(len(data))]
w = [data[i][2] for i in range(len(data))]
cdict = {'green': np.array(len(u)), 'green': np.array(len(u)),
'green':np.array(len(u))}
cdict = {'red': [0],'red': [0],'red': [0]}
ax.quiver(x,y,z,u,v,w, length=0.001, normalize=True, colors=cdict)
ax.set_xlabel("X direction")
ax.set_ylabel("Y direction")
ax.set_zlabel("Z direction")
plt.axis('equal')
plt.show()
if __name__ == '__main__':
main()
這會將所有內容繪制為紅色,而不是所有綠色繪制,並且僅將某些矢量繪制為紅色。 我不太確定自己在做什么,我們將不勝感激! (也是,我被Python 2困在石器時代)
編輯:受以下答案的啟發,我為“不良”頻道創建了一個蒙版,然后創建了兩個圖,一個以藍色的好頻道顯示,另一個以紅色的壞頻道顯示。
dead_chans = [1, 0,0,0,0,0,0,0,1,0,1,0,1,0,0,0]
good_u = np.ma.masked_array(u,dead_chans)
good_v = np.ma.masked_array(v, dead_chans)
good_w = np.ma.masked_array(w, dead_chans)
dead_u = np.ma.masked_array(u, np.logical_not(dead_chans))
dead_v = np.ma.masked_array(v, np.logical_not(dead_chans))
dead_w = np.ma.masked_array(w, np.logical_not(dead_chans))
ax.quiver(x,y,z,good_u,good_v,good_w, length=0.01, normalize=True, color=
'b')
ax.quiver(x,y,z,dead_u,dead_v,dead_w, length=0.01, normalize=True, color =
'r')
plt.show()
您可以將z值設置為np.nan
而不是完全忽略它們。 然后,您可以使用colormap.set_bad()
將nan值的顏色更改為特定的顏色。
希望能有所幫助
https://matplotlib.org/api/_as_gen/matplotlib.colors.Colormap.html
編輯
在這篇文章的幫助下: 如何在matplotlib中使用imshow將NaN值繪制為特殊顏色?
這是一個例子。
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
#Set the defualt cmap for mpl
mpl.rcParams['image.cmap'] = 'Blues'
cmap = mpl.cm.get_cmap()
cmap.set_bad(color='Red')
#Generate some data with np.nan values
x = np.arange(1,13,1)
y = np.arange(1,13,1)
vals = np.zeros([12,12])
for i in range(12):
for j in range(12):
if (i+j)%7==0:
vals[i,j] = np.nan
else:
vals[i,j] = i*j
plt.pcolormesh(x,y,arr)
此代碼返回以下圖:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.