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

如何简化含4个子图的Matplotlib scatter3D绘图代码?

简化Matplotlib多3D子图代码并修复axis错误

问题分析

你尝试简化重复的3D子图代码时遇到两个核心问题:

  • plt.axis() 仅支持2D轴的四元素范围参数,无法直接设置3D轴的六元素范围,因此抛出TypeError
  • 变量名不统一:函数参数是mydata_dataframe,但代码中误用了未定义的data_df,原代码里的data也未关联到输入参数

修复后的简化代码

import matplotlib.pyplot as plt

def plot_example(mydata_dataframe):
    fig = plt.figure(figsize=[15, 15])
    # 存储原代码中四个子图的视角参数
    view_angles = [(0, 90), (45, 0), (35, 45), (20, 40)]
    
    for idx, (elev, azim) in enumerate(view_angles, 1):
        # 创建子图
        ax = fig.add_subplot(2, 2, idx, projection='3d')
        # 绘制散点图,统一使用函数输入的DataFrame
        ax.scatter3D(mydata_dataframe.x, mydata_dataframe.y, mydata_dataframe.z, 
                     c=mydata_dataframe.z, cmap='Blues')
        # 设置对应视角
        ax.view_init(elev, azim)
        # 设置坐标轴标签
        ax.set_xlabel('x', color='red')
        ax.set_ylabel('y', color='red')
        ax.set_zlabel('z', color='red')
        # 设置坐标轴范围,3D轴需分别设置三个轴的范围
        ax.set_xlim(0, 14)
        ax.set_ylim(-6, 6)
        ax.set_zlim(0, 8.5)
    
    plt.show()

关键修改说明

  • 变量名统一:全程使用函数参数mydata_dataframe,避免未定义变量错误
  • 视角参数复用:用列表存储原代码的四个自定义视角,循环时直接读取,保证和原效果一致
  • 3D轴范围设置:放弃plt.axis(),改为在每个子图上调用set_xlim/set_ylim/set_zlim,适配3D轴的需求
  • 循环优化:直接枚举视角列表并生成子图索引,代码更简洁易维护

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:13:24