Matplotlib边缘颜色着色0.0值数据点

nwlls2ji  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(106)

我正在使用matplotlib为一个数组绘制一个3D条形图。我需要为条形图添加一个edgecolor。然而,edgecolor将值为0.0的数据点着色为黑色。有没有办法不对这些数据点着色?我试图在值为0.0时通过循环执行edgecolors=none。然而,这似乎没有帮助。感谢任何帮助。
我用来策划的剧本,

from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
lx= len(r[0])            
ly= len(r[:,0])
xpos = np.arange(0,lx,1)    
ypos = np.arange(0,ly,1)
xpos, ypos = np.meshgrid(xpos+0.25, ypos+0.25)
xpos = xpos.flatten()   
ypos = ypos.flatten()
zpos = np.zeros(lx*ly)

cs = ['r', 'g', 'b', 'y', 'c'] * ly
edgecolor_store = []

dx = 0.5 * np.ones_like(zpos)
dy = 0 * np.ones_like(zpos)
#dz = zpos
dz = r.flatten()
for value in dz: 
    if value == 0.0:
        edgecolor_store.append('none')
    if value > 0.0:
        edgecolor_store.append('black')

 
mask_dz = dz == 0 # SO:60111736, 3d case
#print(dz)
ax.bar3d(xpos,ypos,zpos, dx, dy,dz,color=cs,zsort='average',alpha=0.5,edgecolors=edgecolor_store)

字符串
我使用的样本数据,

[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,   0. ,   0. ,   0. ],[  0. ,   0. ,  20.7,   0. ,   0. ],[  0.6,   0. ,   0.1,   0. ,   0.2],[  0. ,  24.8,   0. ,  46.7,   0. ],[  0. ,   0. ,  99.7,  17.1,  99.3],[  0. ,  12.8,  98.6,   0. ,   6.7],[  0.2,   0. ,   0. ,  12.6,   0. ]


我得到的输出图是,


的数据

b4qexyjb

b4qexyjb1#

我觉得你已经尝试了正确的解决方案:不绘制不需要的酒吧。
你需要一个掩码。顺便说一句,永远不要把浮点数和==进行比较。

mask = ~np.isclose(dz, 0.0)

字符串
然后,绘制由此掩码过滤的数据

ax.bar3d(xpos[mask],ypos[mask],zpos[mask], dx[mask], dy[mask],dz[mask],color=cs[:mask.sum()],zsort='average',alpha=0.5,edgecolors='black')


注意,你不再需要edgecolor了,而且我计算cs的方法(从你的太长的cs开始,并将其截断到所需的确切大小)不是最佳的。


的数据
还请注意,剩下的4条黑线不是0,而是非常小的值(0.1,0.2,0.2和0.6)。

相关问题