在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Matlab如何提取fig文件中的原始數據?

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

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

1. 思路

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

例如現在有一個保存的fig圖形:

圖片

提取fig文件數據的方法為:

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

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

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

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

    結果

    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]
    

    圖片

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

2. 函數

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

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

3. 演示

**3.1 **提取單坐標軸單曲線二維圖原始數據

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

圖片

結果 :返回值 XYZdata = [Xdata Ydata],第一列為X軸坐標數據,第二列為Y軸坐標數據。

圖片

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

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

圖片

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

圖片

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

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 );

圖片

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

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

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 );

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

XYZdata =
  1×2 cell 數組
    {200×2 double}    {500×2 double}

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

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 );

圖片

結果 :返回值為2×1維cell數組,XYZdata = [坐標軸1的數據],XYZdata = [坐標軸2的數據]。

XYZdata =
  2×1 cell 數組
    {500×3 double}
    {500×2 double}

**3.6 **提取多子圖曲線二維圖原始數據

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 );

圖片

結果 :返回值為4×1維cell數組,XYZdata = [坐標軸1的數據],XYZdata = [坐標軸2的數據] ,XYZdata = [坐標軸3的數據],XYZdata = [坐標軸4的數據]。

XYZdata =
  4×1 cell 數組
    {500×2 double}
    {500×2 double}
    {500×2 double}
    {500×2 double}

**3.7 **提取多子圖曲線二維圖原始數據

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

圖片

結果 :返回值為2×1維cell數組,XYZdata = [坐標軸1的數據],XYZdata = [坐標軸2的數據]。

XYZdata =
  2×1 cell 數組
    {500×2 double}
    {500×2 double}

3.8****提取單坐標軸曲線三維圖原始數據

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

圖片

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

圖片

3.9****提取單坐標軸曲線三維曲面圖原始數據

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

圖片

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

圖片

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

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

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

圖片

**3.11 **提取原始數據,并將原始數據保存為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 );

圖片

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

圖片

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 );

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

圖片

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

    關注

    4

    文章

    176

    瀏覽量

    19945
  • 圖形處理器
    +關注

    關注

    0

    文章

    198

    瀏覽量

    25599
  • 數據存儲器
    +關注

    關注

    1

    文章

    69

    瀏覽量

    17793
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    IWR1443和DCA1000EVM采集了原始數據后,如何在MATLAB數據進行后續處理?

    IWR1443和DCA1000EVM采集了原始數據后,在MATLAB 以4x262144 表格存在,4代表4個接受器,26144=256x128x8,我想知道如果在MATLAB
    發表于 12-06 08:40

    用ads1292輸出的原始數據繪制心電波形可行嗎?

    在芯片處于RDATAC模式下,請教問題如下: 1. 用ads1292輸出的原始數據繪制心電波形可行嗎?我們這邊用原始數據繪制的波形很毛躁,看不出心電波形。 2. 若使用ad lead-off,如何在IC輸出數據
    發表于 12-23 08:26

    mpu6050+stm32的原始數據采集程序,通過串口發送到PC

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

    mpu6050原始數據

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

    如何通過波形原始數據獲得頻率

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

    數據庫寫入時如何覆蓋原始數據

    數據庫寫入時如何覆蓋原始數據
    發表于 10-25 11:29

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

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

    通過DMA1將原始數據寫入DAC寄存器

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

    如何提取sensortile.box的原始數據?

    如何提取sensortile.box的原始數據?
    發表于 12-30 07:09

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

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

    基于模板的SAR原始數據模擬

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

    基于DCT-TCQ的SAR原始數據壓縮算法

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

    用STM32實現MPU6050原始數據的讀取

    STM32+MPU6050讀取加速度計和陀螺儀原始數據
    發表于 12-06 11:51 ?11次下載
    用STM32實現MPU6050<b class='flag-5'>原始數據</b>的讀取
    主站蜘蛛池模板: 99涩涩| h视频免费高清在线观看| 69日本人xxxxxxxx色| 性xxxxhd高清| caoporn97人人做人人爱最新| 黄网站播放| 久久久久久久国产精品影院| ts在线视频| 亚洲天天综合| 日操夜干| 成人窝窝午夜看片| 看黄免费在线| 天天操国产| 天天在线天天看成人免费视频| 天天狠天天天天透在线| 久草天堂| 又粗又大又爽又色又过瘾视频| 黑色丝袜在丝袜福利国产| 婷婷六月激情在线综合激情| 日本黄色影片在线观看| 亚洲综合成人网| 色视频网址| 狠狠躁夜夜躁人人爽天天段 | 2021精品综合久久久久| 直接观看黄网站免费视频| 有一婷婷色| 男女交性视频免费播放| 亚洲美女爱爱| 欧美午夜在线播放| 成年人www| 精品久草| 操美女免费网站| 男人j进入女人j在线视频| 四虎4hu| 国模视频在线| 色四虎| 成人国产亚洲欧美成人综合网| 性生交酡| 日本高清www| 在线播放国产不卡免费视频| japanese日本护士xx亚洲|