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
相关产品推荐
相关产品推荐

