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

Matlab:如何将函数中绘制的图复制到App Designer的UIAxes中

问题:在App Designer中复现Graph绘图的完全一致效果

我在函数中用以下代码绘制了一幅图:

P = plot( graph(names,names),'LineStyle','none','Marker','x','MarkerSize',8,'NodeColor','red','XData',xi,'YData',yi); 
highlight(P,n,'NodeColor','green');

现在需要通过按钮回调函数,把这幅图保存/复制到App Designer新建的UIAxes中;或者直接在App Designer里绘制出完全相同效果的图,点击按钮时调用生成该图的函数。

我尝试过以下方法:
先生成绘图数据对象:

plotData = plot( graph(names,names),'LineStyle','none','Marker','x','MarkerSize',8,'NodeColor','red','XData',xi,'YData',yi);

然后在UIAxes中执行:

plot( app.UIAxesTeziste,P)  % 方法1
% 或者
plot(app.UIAxesTeziste, plotData.XData, plotData.YData)  % 方法2

方法2能显示数据,但呈现效果和原图形不一致,希望实现完全一致的可视化效果。


解决方案

思路1:直接在UIAxes中绘制完整图形

在按钮回调函数里,直接指定UIAxes作为绘图父对象,完整复刻原绘图逻辑:

function ButtonPushed(app, event)
    % 确保names、xi、yi、n已在App中定义或可传入
    g = graph(names, names);
    % 直接在目标UIAxes上绘制Graph,指定Parent属性
    P = plot(g, 'Parent', app.UIAxesTeziste, ...
        'LineStyle','none','Marker','x','MarkerSize',8,'NodeColor','red',...
        'XData',xi,'YData',yi);
    % 应用highlight样式
    highlight(P, n, 'NodeColor', 'green');
end

这种方式直接在UIAxes上生成和原图形参数完全一致的Graph绘图,能保证视觉效果100%匹配。

思路2:复制已有图形到UIAxes

如果已经有外部生成的图形对象P,可以通过复制属性的方式迁移到UIAxes:

function ButtonPushed(app, event)
    % 假设P是外部传入的原图形对象
    g = graph(names, names);
    % 获取原图形的所有可继承属性
    props = get(P);
    props = rmfield(props, {'Parent', 'HandleVisibility'}); % 移除冲突属性
    % 在UIAxes上创建新图形,继承原属性
    newP = plot(app.UIAxesTeziste, g, props{:});
    % 复制highlight效果
    h = findobj(P.Parent, 'Type', 'highlight');
    if ~isempty(h)
        highlight(newP, n, 'NodeColor', h.NodeColor);
    end
end

原方法失效原因

方法2用普通plot绘制XData和YData,本质是绘制散点,而原图形是基于graph对象的特殊绘图,包含节点标识、边关联等底层逻辑,普通plot无法复刻这些细节,导致效果不一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:36:59