MATLAB提取.fig折线图X/Y数据遇GraphicsPlaceholder类报错怎么解决?
报错原因
直接通过Children属性逐层取对象的方式依赖图形元素的堆叠顺序,坐标轴的子对象除了折线之外,还可能包含占位符、图例、文本标注、标题等非折线类图形对象,你取到的ln是matlab.graphics.GraphicsPlaceholder类的占位对象,本身没有XData属性,因此触发报错。
解决方法
使用findobj指定类型筛选目标对象,避免因元素顺序不对取错对象:
单条折线提取代码
fig = openfig('graphA.fig'); % 精准定位图中的坐标轴对象 ax = findobj(fig, 'Type', 'axes'); % 筛选坐标轴下所有折线类对象 ln = findobj(ax, 'Type', 'line'); % 提取数据,若只有一条折线可直接取值 X = ln.XData; Y = ln.YData;
多条折线提取代码
如果图中包含多条折线,ln会返回对象数组,可通过循环批量提取所有折线的数据:
fig = openfig('graphA.fig'); ax = findobj(fig, 'Type', 'axes'); ln = findobj(ax, 'Type', 'line'); % 循环存储所有折线的XY数据 X_all = cell(length(ln), 1); Y_all = cell(length(ln), 1); for k = 1:length(ln) X_all{k} = ln(k).XData; Y_all{k} = ln(k).YData; end
内容的提问来源于stack exchange,提问作者Suzwani
相关产品推荐
相关产品推荐

