【发布时间】:2019-10-22 04:32:12
【问题描述】:
我有一个 3-d 图,但我的 16 个数据点中有 4 个包含来自其中一个组件的无效数据(即,一个向量具有良好的 x 和 y 数据,但有坏的 z 数据)。我可以完全省略这些点,但随后我将摆脱良好的数据(在 x 和 y 方向)。理想情况下,我希望能够将丢失数据的颜色更改为一种标志,以便它们仍然被绘制,但我可以分辨出哪些丢失了数据。
我对彩色地图的经验很少,尤其是在 3-d 方面。我尝试从以下方面调整解决方案: (python) plot 3d surface with colormap as 4th dimension, function of x,y,z Create own colormap using matplotlib and plot color scale 这似乎最有帮助: Adding colors to a 3d quiver plot in 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()
【问题讨论】:
-
cdict = {'red': [0],'red': [0],'red': [0]}用绿色覆盖以前的字典。此外,您不能拥有多个相同的密钥。没有必要指定'green三次。目前还不清楚你想要什么。 “我的 16 个数据点中有 4 个缺少数据”……在哪里?我没有看到丢失的数据。此外,如果 z 值丢失,您打算如何在 3d 系统中绘制它? -
@Sheldore 对,我不确定如何在不重写以前的字典的情况下索引颜色图。还有一个关于丢失数据的澄清,我正在从一个有几个死通道的示波器中读取数据,所以我本质上是在绘制噪声而不是实际数据,我只是将问题更新为(希望)更清楚!
标签: python python-2.7 matplotlib