我正在使用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. ]
型
我得到的输出图是,
的数据
1条答案
按热度按时间b4qexyjb1#
我觉得你已经尝试了正确的解决方案:不绘制不需要的酒吧。
你需要一个掩码。顺便说一句,永远不要把浮点数和
==
进行比较。字符串
然后,绘制由此掩码过滤的数据
型
注意,你不再需要edgecolor了,而且我计算
cs
的方法(从你的太长的cs
开始,并将其截断到所需的确切大小)不是最佳的。的数据
还请注意,剩下的4条黑线不是0,而是非常小的值(0.1,0.2,0.2和0.6)。