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

如何用Matplotlib绘制3D圆柱柱状图而非方形柱状图?

关于Matplotlib绘制3D圆柱状柱状图的问题

原生支持情况

Matplotlib没有原生提供直接绘制3D圆柱状柱状图的函数,默认的Axes3D.bar()只能生成你提到的方形柱体样式。

实现方法

要做出圆柱状的3D柱状图,需要手动创建圆柱模型并添加到3D坐标轴中,核心思路是逐个数据点生成圆柱的底面、顶面和侧面,以下是一个可运行的示例代码:

import matplotlib.pyplot as plt
from matplotlib.patches import Circle
from mpl_toolkits.mplot3d import art3d
import numpy as np

# 准备示例数据
x = np.array([0, 1, 2])
y = np.array([0, 1, 2])
z = np.array([3, 5, 4])
radius = 0.3  # 控制圆柱粗细

# 创建3D画布
fig = plt.figure()
ax = fig.add_subplot(projection='3d')

# 遍历每个数据点绘制圆柱
for xi, yi, zi in zip(x, y, z):
    # 绘制圆柱底面
    circle_bottom = Circle((xi, yi), radius, color='cornflowerblue')
    ax.add_patch(circle_bottom)
    art3d.pathpatch_2d_to_3d(circle_bottom, z=0, zdir='z')
    
    # 绘制圆柱顶面
    circle_top = Circle((xi, yi), radius, color='cornflowerblue')
    ax.add_patch(circle_top)
    art3d.pathpatch_2d_to_3d(circle_top, z=zi, zdir='z')
    
    # 绘制圆柱侧面
    theta = np.linspace(0, 2*np.pi, 50)
    xs = xi + radius * np.cos(theta)
    ys = yi + radius * np.sin(theta)
    # 连接底面和顶面的竖线
    for i in range(len(theta)-1):
        ax.plot3D([xs[i], xs[i]], [ys[i], ys[i]], [0, zi], color='cornflowerblue')

# 设置坐标轴范围和标签
ax.set_xlim(-0.5, 2.5)
ax.set_ylim(-0.5, 2.5)
ax.set_zlim(0, max(z)+1)
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')

plt.show()

额外说明

  • 调整radius参数可以改变圆柱的粗细
  • 如果需要更平滑的侧面,也可以用plot_surface方法生成曲面替代竖线
  • 圆柱的颜色、透明度等样式可以通过修改color、alpha参数调整

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:42:10