2015-11-16 30 views
1

在保存圖形後,是否有重用線條對象來指定新屬性的方法? 比如我定義的:保存圖形後重用線條對象

figure; 
hold on; 
line1 = line(linspace(0,2*pi,1000),sin(linspace(0,2*pi,1000))); 

現在我將它保存爲Sinus.fig,當我後來打開它,我希望能夠像做set(line1,'LineWidth',2);。有沒有辦法做到這一點或總體來說,在保存數字後改變數字?提前致謝!

回答

2

你在圖中嵌入的appdata保存它。這意味着您可以使用guidata函數來保存所有圖形句柄,然後將它們保存爲圖。
稍後加載時,它們將與該圖一起提供。

例: 生成圖形和圖形對象,節省這將需要重新使用的所有句柄:

%% // Generate figure and retrieve handles of graphic objects 
h.fig = figure; 
hold on; 
h.line1 = line(linspace(0,2*pi,1000),sin(linspace(0,2*pi,1000))); 

我們在結構h

>> h 
h = 
     fig: [1x1 Figure] 
    line1: [1x1 Line] 

現在讓我們來嵌入h進入圖然後保存:

%% // Save 
guidata(h.fig , h)  %// Save the handle information in the figure 
saveas(h.fig,'sinus.fig') %// Save the figure into file 
clear all     %// clear workspace 

現在我們可以重新加載數字的任何時間,結構h仍然可以在圖中的應用程序數據(使用相同的guidata功能訪問):

%% // Now re-open and load 
f1 = openfig('C:\TEMP\sinus.fig') ; %// open the figure and retrieve the handle 
h = guidata(f1) ;     %// retrieve the full handle structure saved 


set(h.line1,'LineWidth',2);   %// do what you want with your line/objects handles ;-) 

注意,你也可以使用setappdatagetappdata來保存你可能對你的圖形有用的變量。查看他們的文檔以獲取更多信息。


1

您可以使用findobj從一個開放的數字提取特定對象。在你的情況下,你想要類似的東西。

line1=getobject(gca, 'Type', 'line'); 

如果圖中有多條線,請仔細一點,因爲這會將它們全部提取出來。如果這是一個問題,你可以添加額外的參數,只選擇你想要的或使用線屬性以後分離它們。

+3

如果你這樣做,我會建議爲每個你想檢索的對象分配一個唯一的'標籤'。它將使查找所需的對象變得更容易和**毫不含糊**。要分配一個標籤,只需設置對象的Tag屬性,稍後可以使用:'line1 = getobject(gcf,'Tag','TheCustomTagDefinedForThisObject');' – Hoki