You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matplotlib中bar3d如何隐藏高度为0的柱子以提升3D交互渲染速度

报错原因

你触发TypeError的核心原因是zpos被定义为整数0,dx、dy是基于这个整数生成的标量,三者都不是数组,无法使用布尔掩码做下标筛选。

修正代码

只需将zpos、dx、dy调整为和高度数组dz长度一致的数组,再用掩码过滤零高度项即可,修改后的完整代码如下:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(projection='3d')
x = y = np.concatenate([np.array([5,4,3,2,1]), np.zeros(35)])
hist, xedges, yedges = np.histogram2d(x, y, bins=40, range=[[0, 40], [0, 40]])

# 生成柱子锚点坐标
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
# 调整zpos为和dz长度一致的全0数组
zpos = np.zeros_like(hist.ravel())

# 调整dx、dy为对应长度的数组
dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.ravel()

# 过滤零高度的柱子
mask_dz = dz == 0
ax.bar3d(xpos[~mask_dz], ypos[~mask_dz], zpos[~mask_dz], dx[~mask_dz], dy[~mask_dz], dz[~mask_dz], zsort='average')

plt.show()

修改后运行不会报错,仅渲染高度不为0的柱子,3D交互旋转的流畅度会大幅提升,显示效果和原图完全一致,仅去掉了无意义的零高度柱子。

内容的提问来源于stack exchange,提问作者sdbbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:15:03