doctor_what 2023-03-06 20:29 采纳率: 100%
浏览 49
已结题

Matlab 4D绘图提问(X,Y,Z,F(颜色))

Matlab画图 现有四列散点数据x1,y1,z1,f1,想画一个如下图所示的三维曲线图

img

数据大概是这样的,100 * 100 * 100个点。站里有好多利用mesh,meshc,meshz函数绘制三维网格图形的,尝试画了一下但是行不通?用Scatter3画了一个。刚开始用,在论坛里查了好久,但是没搞明白。希望有兄弟愿意指导一下思路?

img

img

我现在的初步想法是插值、网格化,再选择合适的函数画图,代码是这样滴

  data = sortrows(data); % data就是原始数据,由x1,y1,z1,f1四组列向量构成
  x1 = data(:,1);
  y1 = data(:,2);
  z1 = data(:,3);
  f1 = data(:,4);

  x2 = (-0.17):0.001:(-0.12); 
  y2 = (-0.01):0.001:(0.01);
  z2 = 3.99:0.001:4.01;

  [X,Y,Z] = meshgrid(x2,y2,z2);
  F = griddata(x1,y1,z1,f1,X,Y,Z,'linear');

然后用新获得的这组X,Y,Z,F来画图,但是由于不知道选啥函数合适,还在试,也不知道这样处理数据会失真多少。

  • 写回答

6条回答 默认 最新

  • 「已注销」 2023-03-06 20:55
    关注

    “Devil组”引证GPT后的撰写:

    • 你的初步想法是正确的,使用插值函数griddata可以将原始散点数据转换为网格化数据,并用于绘制三维曲线图。

    以下是一个可能的实现:

    % 排序原始数据
    data = sortrows(data);
    x1 = data(:,1);
    y1 = data(:,2);
    z1 = data(:,3);
    f1 = data(:,4);
    
    % 定义插值网格
    x2 = linspace(min(x1), max(x1), 100); 
    y2 = linspace(min(y1), max(y1), 100);
    z2 = linspace(min(z1), max(z1), 100);
    [X,Y,Z] = meshgrid(x2,y2,z2);
    
    % 插值
    F = griddata(x1, y1, z1, f1, X, Y, Z, 'cubic');
    
    % 绘制三维曲线图
    figure;
    p = patch(isosurface(X, Y, Z, F, 0.5));
    set(p, 'FaceColor', 'red', 'EdgeColor', 'none');
    daspect([1,1,1]);
    view(3);
    axis tight;
    camlight;
    lighting gouraud;
    
    
    

    假设原始数据包含了足够的样本点,可以进行插值。如果原始数据太稀疏,插值结果可能会失真,需要更多的样本点来支撑插值结果。

    这个代码用到了isosurface函数来绘制三维曲线图,可以根据需要进行调整,例如改变曲面的等值线值、曲面的颜色等等。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月21日
  • 已采纳回答 3月13日
  • 创建了问题 3月6日

悬赏问题

  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测