- either get rid of the -struct option, or
- create a scalar structure (by making the fields arrays, not the structure).
Saving a Structured Array (containing plot parameters) to a mat file
    3 views (last 30 days)
  
       Show older comments
    
Hi, Im trying to save plot data by using a structured arra
            ax=app.UIAxes;
            ax.Children;
            h1 = findall(ax, 'type', 'line');      % Line objects
            nlines=numel(h1);
Assign the desired plot parameters to a struct "S"
            for i=1:nlines
                thisLine=h1(i);  
                S(i).Xdata=thisLine.XData; S(i).Ydata=thisLine.YData;
                S(i).Colour=thisLine.Color;
                S(i).LineStyle=thisLine.LineStyle;
                S(i).LineWidth=thisLine.LineWidth;
                S(i).DName=thisLine.DisplayName;
            end 
Save to a  .MAT file
            try
                [file,folder]=uiputfile({'*.mat','Matlab Files'},'Save Data',app.startfolder);
            catch
                [file,folder]=uiputfile({'*.mat','Matlab Files'},'Save Data','C:\');
            end    
            app.startfolder=folder;
            savepath=fullfile(folder,file);      
            save(savepath,"-struct",'S')
But I keep getting this error:
            Error using save
            The argument to -STRUCT must be the name of a scalar structure variable.
I have checked the class of S and the fieldnames contained within it:
            fields = fieldnames(S)
            class(S)
            fields =            
            6×1 cell array            
            {'Xdata'    }
            {'Ydata'    }
            {'Colour'   }
            {'LineStyle'}
            {'LineWidth'}
            {'DName'    }
            ans =            
            'struct'
Thanks for any help
0 Comments
Accepted Answer
  Stephen23
      
      
 on 24 Jun 2024
        
      Edited: Stephen23
      
      
 on 24 Jun 2024
  
      Explanation: your structure is not scalar: it has nlines elements. The -struct option only works with scalar structures.
Error using save
The argument to -STRUCT must be the name of a scalar structure variable.
%                                             ^^^^^^
Solutions:
Tip: always LOAD into an output variable!
3 Comments
  Steven Lord
    
      
 on 24 Jun 2024
				Since several of the properties you're trying to store in the struct are non-scalar, it won't work as you wrote it. But you could have the fields of the scalar struct contain cell arrays, where each cell in the array can have data of different sizes depending on the properties of the specific line you're trying to store inside it.
h = plot(1:10, 1:10, 'r-', 1:7, 10:-1:4, 'k:');
for k = 1:numel(h)
    S.XData{k} = h(k).XData;
    S.YData{k} = h(k).YData;
end
disp(S)
isscalar(S) % yes
isstruct(S) % also yes
cd(tempdir)
save('mydata.mat', '-struct', 'S')
whos -file mydata.mat
P = load('mydata.mat')
isequal(P, S)
More Answers (0)
See Also
Categories
				Find more on Structures in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


