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

如何用Matplotlib绘制Excel中的指定样式3D图表

用Matplotlib绘制匹配Excel样式的3D分组柱状图

你要实现的是3D分组柱状图,Matplotlib没有直接的一键生成API,但可以通过手动调整柱子位置来复刻Excel的样式,以下是具体实现步骤和代码:

核心思路

通过bar3d函数手动控制每个柱子的X、Z轴位置,给同Data类别下的不同V类别柱子添加偏移量避免重叠,同时调整视角和刻度让图表贴近Excel效果。

完整代码示例

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Patch

# 1. 准备数据(替换成你的实际数据)
x_categories = ['Data1', 'Data2', 'Data3']
z_categories = ['V1', 'V2', 'V3']
# 数值矩阵:行对应Data类别,列对应V类别
value_matrix = np.array([
    [10, 15, 8],   # Data1的V1/V2/V3数值
    [12, 9, 14],   # Data2的V1/V2/V3数值
    [7, 18, 11]    # Data3的V1/V2/V3数值
])

# 2. 设置柱子尺寸与位置参数
bar_width = 0.25    # X轴方向柱子宽度
bar_depth = 0.25    # Z轴方向柱子深度
x_indices = np.arange(len(x_categories))  # Data类别的索引位置
z_indices = np.arange(len(z_categories))  # V类别的索引位置
colors = ['#1f77b4', '#ff7f0e', '#2ca02c']  # 对应V1/V2/V3的柱子颜色

# 3. 创建3D绘图对象
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

# 4. 循环绘制所有柱子
for x_idx, x in enumerate(x_indices):
    for z_idx, z in enumerate(z_indices):
        # 计算当前柱子的位置:给同Data下的不同V柱子添加X轴偏移
        x_pos = x + z_idx * bar_width
        z_pos = z
        y_pos = 0  # Y轴起始位置从0开始
        bar_height = value_matrix[x_idx, z_idx]
        
        # 绘制3D柱子
        ax.bar3d(x_pos, y_pos, z_pos, bar_width, bar_height, bar_depth, 
                 color=colors[z_idx], alpha=0.8)

# 5. 设置坐标轴与图例
# X轴刻度:让刻度标签显示在分组柱子的中间位置
ax.set_xticks(x_indices + bar_width * (len(z_categories)-1)/2)
ax.set_xticklabels(x_categories)
# Z轴刻度
ax.set_zticks(z_indices)
ax.set_zticklabels(z_categories)
# 坐标轴标签
ax.set_xlabel('Data类别')
ax.set_zlabel('V类别')
ax.set_ylabel('数值')

# 添加图例(3D柱状图无法自动生成图例,手动用Patch创建)
legend_patches = [Patch(facecolor=colors[i], label=z_categories[i]) for i in range(len(z_categories))]
ax.legend(handles=legend_patches, loc='upper right')

# 6. 调整视角,匹配Excel图表的角度
ax.view_init(elev=20, azim=-50)

plt.tight_layout()
plt.show()

关键细节说明

  • 柱子分组:通过给同Data类别的不同V柱子添加z_idx * bar_width的X轴偏移,实现分组效果,避免柱子重叠
  • 视角调整:view_init的elev(仰角)和azim(方位角)参数可以根据你的Excel图表微调,直到视觉效果匹配
  • 数据替换:把value_matrix替换成你实际的数值即可,确保行对应Data1/Data2/Data3,列对应V1/V2/V3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 10:11:05