0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Matlab如何提取fig文件中的原始數(shù)據(jù)?

冬至子 ? 來源:Matlab Fans ? 作者:Matlab Fans ? 2023-07-20 17:30 ? 次閱讀

有時候運行的程序只保存了fig文件,而沒有保存原始數(shù)據(jù),當需要對fig文件中的數(shù)據(jù)進行分析和處理時就會犯難了。本文詳細介紹Matlab如何提取fig文件中的原始數(shù)據(jù),并提供原創(chuàng)的m函數(shù),可方便實現(xiàn)各類figure圖形提取數(shù)據(jù)。

1. 思路

fig文件作為Matlab中的圖形文件,其實原始數(shù)據(jù)是會存儲在figure對象中的,那么通過get函數(shù)獲取figure對象中相應的數(shù)據(jù)屬性,就可以得到fig圖形中的數(shù)據(jù)。

例如現(xiàn)在有一個保存的fig圖形:

圖片

提取fig文件數(shù)據(jù)的方法為:

  • 第一步 :打開圖形(.fig)文件;

  • 第二步 :獲取曲線(line)句柄;

  • hl = get(ga,'Children')    % 獲取坐標軸的子對象:Line對象
    ha = get(gcf,'Children');  % 獲取當前的圖形的子對象:Axes坐標軸對象
    
  • 第三步 :獲取line對象的xdata、yadata屬性;

  • xdata = get(hl,'XData');
    ydata = get(hl,'YData');
    

    結(jié)果

    hl = 
      Line - 屬性:
                  Color: [0 0.4470 0.7410]
              LineStyle: '-'
              LineWidth: 0.5000
                 Marker: 'none'
             MarkerSize: 6
        MarkerFaceColor: 'none'
                  XData: [1×500 double]
                  YData: [1×500 double]
                  ZData: [1×0 double]
    

    圖片

可以看出繪制曲線的原始數(shù)據(jù)保存在line對象中,而line對象是axes的子對象,axes是figure的子對象。獲取fig文件原始數(shù)據(jù)的思路是:先找出figure對象的所有axes子對象,再找出每個坐標軸的所有l(wèi)ine子對象,最后獲取每條line的XData、YData、ZData屬性,得到原始數(shù)據(jù)。

2. 函數(shù)

當figure圖形中的坐標軸很多或線條很多,或者需要對大量figure圖形進行批量處理時,上面的方法就很繁瑣,不便于操作。為此筆者開發(fā)了函數(shù)Fun_GetFigData.m,可以方便的提取各種類型figure圖形文件的原始數(shù)據(jù)。

function [XYZdata,Str] = Fun_GetFigData( hf,filename )
% XYZdata = Fun_GetFigData( hf ) 獲取figure圖的
% Str表頭字符串
% hf  Figure圖形句柄 或 Figure文件名(必須帶擴展名.fig)
% XYZdata 坐標數(shù)組
% filename 保存為xls文件的名稱,不輸入或輸入0時不保存xls文件
%                              輸入非零數(shù)值時,保存成xls文件,文件名與figure文件名相同
%                              輸入filename時按照輸入的字符串保存成xls文件
%                              注意filename不帶擴展名.xls
% Str 為與XYZdata一一對應的字符串cell數(shù)組,用于說明每列數(shù)據(jù)的表頭,在保存為xls文件時保存為表頭
% 文件調(diào)用規(guī)則,請打開下面例子
% open Test_Fun_GetFigData

3. 演示

**3.1 **提取單坐標軸單曲線二維圖原始數(shù)據(jù)

t = linspace(0,10,500);
y = sin(t);
hf = figure;
plot(t,y)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值 XYZdata = [Xdata Ydata],第一列為X軸坐標數(shù)據(jù),第二列為Y軸坐標數(shù)據(jù)。

圖片

3.2 提取單坐標軸雙曲線二維圖原始數(shù)據(jù)(橫坐標相同)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plot(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值XYZdata = [Xdata Ydata1 Ydata2],第一列為X軸坐標數(shù)據(jù),第二列為曲線1的Y軸坐標數(shù)據(jù),第三列為曲線2的Y軸坐標數(shù)據(jù)。

圖片

**3.3 **提取單坐標軸雙曲線二維圖原始數(shù)據(jù)(橫坐標維數(shù)相同,但數(shù)值不同)

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,500);
y2 = cos(t2);
hf = figure;
plot(t1,y1,t2,y2)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值 XYZdata = [Xdata1Ydata1 Xdata2 Ydata2],第一列為曲線1的X軸坐標數(shù)據(jù),第二列為曲線1的Y軸坐標數(shù)據(jù),第三列為曲線2的X軸坐標數(shù)據(jù),第四列為曲線2的Y軸坐標數(shù)據(jù)。

3.4 提取單坐標軸雙曲線二維圖原始數(shù)據(jù)(橫坐標維數(shù)不同)

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,200);
y2 = cos(t2);
hf = figure;
plot(t1,y1,t2,y2)
XYZdata = Fun_GetFigData( hf );

結(jié)果 :返回值為1×2維cell數(shù)組,XYZdata = [坐標軸1、曲線1的數(shù)據(jù)],XYZdata = [坐標軸1、曲線1的數(shù)據(jù)]。

XYZdata =
  1×2 cell 數(shù)組
    {200×2 double}    {500×2 double}

**3.5 **提取單坐標軸雙曲線二維圖原始數(shù)據(jù)(橫坐標維數(shù)不同)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
subplot(211)
plot(t,y1)
subplot(212)
plot(t,y1,t,y1+y2)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值為2×1維cell數(shù)組,XYZdata = [坐標軸1的數(shù)據(jù)],XYZdata = [坐標軸2的數(shù)據(jù)]。

XYZdata =
  2×1 cell 數(shù)組
    {500×3 double}
    {500×2 double}

**3.6 **提取多子圖曲線二維圖原始數(shù)據(jù)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
y3 = tan(t);
y4 = cot(t);
hf = figure;
subplot(221)
plot(t,y1)
subplot(222)
plot(t,y2)
subplot(223)
plot(t,y3)
subplot(224)
plot(t,y4)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值為4×1維cell數(shù)組,XYZdata = [坐標軸1的數(shù)據(jù)],XYZdata = [坐標軸2的數(shù)據(jù)] ,XYZdata = [坐標軸3的數(shù)據(jù)],XYZdata = [坐標軸4的數(shù)據(jù)]。

XYZdata =
  4×1 cell 數(shù)組
    {500×2 double}
    {500×2 double}
    {500×2 double}
    {500×2 double}

**3.7 **提取多子圖曲線二維圖原始數(shù)據(jù)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plotyy(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值為2×1維cell數(shù)組,XYZdata = [坐標軸1的數(shù)據(jù)],XYZdata = [坐標軸2的數(shù)據(jù)]。

XYZdata =
  2×1 cell 數(shù)組
    {500×2 double}
    {500×2 double}

3.8****提取單坐標軸曲線三維圖原始數(shù)據(jù)

t = linspace(0,10,500);
y = sin(t);
z = cos(t);
hf = figure;
plot3(t,y,z)
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值 XYZdata = [Xdata Ydata Zdata],第一列為X軸坐標數(shù)據(jù),第二列為Y軸坐標數(shù)據(jù),第三列為Z軸坐標數(shù)據(jù)。

圖片

3.9****提取單坐標軸曲線三維曲面圖原始數(shù)據(jù)

[X,Y] = meshgrid(1:0.5:10,1:20);
Z = sin(X) + cos(Y);
hf = figure;
surf(X,Y,Z);
XYZdata = Fun_GetFigData( hf );

圖片

結(jié)果 :返回值 XYZdata = [Xdata Ydata Zdata],第一列為X軸坐標數(shù)據(jù),第二列為Y軸坐標數(shù)據(jù),第三列為Z軸坐標數(shù)據(jù)。

圖片

3.10 提取原始數(shù)據(jù),并將原始數(shù)據(jù)保存為xls文件(指定文件名)

t = linspace(0,10,500);
y1 = sin(t);
y2 = cos(t);
hf = figure;
plotyy(t,y1,t,y2)
XYZdata = Fun_GetFigData( hf,'雙坐標軸數(shù)據(jù)' ); % 指定文件名

結(jié)果 :按照指定文件名保存“雙坐標軸數(shù)據(jù).xls”文件,每個坐標軸單獨存成一個工作表(sheet),曲線存儲在該坐標軸所對應的工作表中。

圖片

**3.11 **提取原始數(shù)據(jù),并將原始數(shù)據(jù)保存為xls文件(默認文件名)

x = linspace(-2*pi,2*pi);
y = linspace(0,4*pi);
[X,Y] = meshgrid(x,y);
Z = sin(X)+cos(Y);
figure
contour(X,Y,Z);
saveas(gcf,'等高線圖');   % 保存當前figure為'等高線圖.fig'
XYZdata = Fun_GetFigData( '等高線圖.fig',1 );

圖片

結(jié)果 :按照與fig文件相同的文件名保存“等高線圖.xls”文件,數(shù)據(jù)存儲在該坐標軸所對應的工作表中。

圖片

t1 = linspace(0,10,500);
y1 = sin(t1);
t2 = linspace(-10,0,200);
y2 = cos(t2);
hf = figure;
subplot(211)
plot(t1,y1,t2,y2)
subplot(212)
plot(t1,10*y1)
XYZdata = Fun_GetFigData( hf,1 );

結(jié)果 :按照與默認文件名保存“圖形數(shù)據(jù).xls”文件,每個坐標軸中的每條曲線都單獨存成一個工作表(sheet),數(shù)據(jù)存儲在對應的工作表中。

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    175

    瀏覽量

    19847
  • 圖形處理器
    +關(guān)注

    關(guān)注

    0

    文章

    193

    瀏覽量

    25408
  • 數(shù)據(jù)存儲器

    關(guān)注

    1

    文章

    68

    瀏覽量

    17755
收藏 人收藏

    評論

    相關(guān)推薦

    如何使用Position2Go Board在MATLAB提取原始數(shù)據(jù)來繪制距離多普勒圖?

    有人可以分步解釋如何使用 Position2Go Board 在 MATLAB提取原始數(shù)據(jù)來繪制距離多普勒圖嗎?
    發(fā)表于 01-25 06:18

    無法使用MATLAB的Position2 Go雷達套件提取原始數(shù)據(jù)怎么解決?

    我無法使用 MATLAB 的 Position2 Go 雷達套件提取原始數(shù)據(jù)。 MATLAB 錯誤: 使用串行時出錯(第 99 行)指定了
    發(fā)表于 01-31 06:15

    請問對雷達獲取的原始數(shù)據(jù)進行歸一化處理的具體方法是什么?

    我想輸入我自己的數(shù)據(jù)文件來運行你提供的算法,但我必須先知道你的歸一化方法,才能把我的原始數(shù)據(jù)轉(zhuǎn)換成像你一樣的歸一化外觀。非常感謝。
    發(fā)表于 05-31 06:05

    mpu6050+stm32的原始數(shù)據(jù)采集程序,通過串口發(fā)送到PC

    mpu6050+stm32的原始數(shù)據(jù)采集程序,通過串口發(fā)送到PC: printf("\r\n---------加速度X軸原始數(shù)據(jù)---------%d \r\n",GetData
    發(fā)表于 05-23 15:43

    mpu6050原始數(shù)據(jù)

    用51讀取mpu6050原始數(shù)據(jù),為什么數(shù)據(jù)都是-004,而且還不變。代碼就是網(wǎng)上找的常見的。
    發(fā)表于 03-06 14:24

    如何通過波形原始數(shù)據(jù)獲得頻率

    目前在用stm32做一個小型心電儀,實現(xiàn)方法是通過AD轉(zhuǎn)換獲取心電波形的原始數(shù)據(jù),然后進行分析,目前有一個關(guān)鍵的困難,那就是如何在知道這些原始數(shù)據(jù)的情況下,分析出心率,希望大家可以給一些建議和幫助,謝謝
    發(fā)表于 04-21 17:03

    數(shù)據(jù)庫寫入時如何覆蓋原始數(shù)據(jù)

    數(shù)據(jù)庫寫入時如何覆蓋原始數(shù)據(jù)
    發(fā)表于 10-25 11:29

    原始數(shù)據(jù)傳輸?shù)腂LE配置文件該怎么選擇?

    嗨,大家好,這是發(fā)送/接收原始數(shù)據(jù)(數(shù)組EX:UTI8TXBuff[32);從移動到PSoC4-BLE板)的最佳方式。數(shù)據(jù)可能是一個命令。在創(chuàng)建項目時,我需要選擇哪些配置文件?謝謝,Ashok R
    發(fā)表于 08-27 08:01

    求幫寫一個篩選原始數(shù)據(jù)文件的程序,有償!

    原始數(shù)據(jù)中進行讀取文件,根據(jù)條件篩選判斷出想要的數(shù)據(jù),進行保存!(LabVIEW)聯(lián)系qq:1154994116;
    發(fā)表于 03-20 11:16

    通過DMA1將原始數(shù)據(jù)寫入DAC寄存器

    序列,通過DMA1將原始數(shù)據(jù)寫入DAC寄存器,同時產(chǎn)生正弦波,AD讀取頻率稍大于DA頻率。將AD讀取寄存器數(shù)據(jù)以串口發(fā)送至matlab軟件,以實現(xiàn)對DAC
    發(fā)表于 08-17 07:16

    如何提取sensortile.box的原始數(shù)據(jù)?

    如何提取sensortile.box的原始數(shù)據(jù)
    發(fā)表于 12-30 07:09

    如何將ADC采集的原始數(shù)據(jù)的序列轉(zhuǎn)換成VisualAnalogPattern Loader可以接受的I Only文件,文件格式是怎樣的?

    如何將ADC采集的原始數(shù)據(jù)(從-8192~+8192)的序列轉(zhuǎn)換成VisualAnalogPattern Loader可以接受的I Only文件,文件格式是怎樣的?主要是用來評估采集
    發(fā)表于 12-15 06:22

    基于模板的SAR原始數(shù)據(jù)模擬

    合成孔徑雷達(Synthetic Aperture Radar,SAR)原始數(shù)據(jù)模擬是SAR 模擬的基礎(chǔ),對SAR 系統(tǒng)研究有重要意義。時域模擬方法重現(xiàn)了回波數(shù)據(jù)的產(chǎn)生過程,數(shù)據(jù)逼真度高,被廣泛使用,但
    發(fā)表于 12-19 14:14 ?13次下載

    基于DCT-TCQ的SAR原始數(shù)據(jù)壓縮算法

    該文提出了一種基于離散余弦變換(DCT)和網(wǎng)格編碼量化(TCQ)的SAR 原始數(shù)據(jù)壓縮算法。SAR 原始數(shù)據(jù)可以看成是距離向和方位向的2 維線性調(diào)頻信號的線性平移疊加,因而含有豐富的
    發(fā)表于 06-23 14:29 ?0次下載

    用STM32實現(xiàn)MPU6050原始數(shù)據(jù)的讀取

    STM32+MPU6050讀取加速度計和陀螺儀原始數(shù)據(jù)。
    發(fā)表于 12-06 11:51 ?11次下載
    用STM32實現(xiàn)MPU6050<b class='flag-5'>原始數(shù)據(jù)</b>的讀取