2015-11-17 33 views
0

返回一个错误,我想散点图被存储为结构数据类型的数据。传递结构散射功能的MATLAB

scatter(1,1, ... 
'ApplicationData', lin_data.ApplicationData, ... 
'CData', lin_data.CData, ... 
'CDataSource', lin_data.CDataSource, ... 
'Jitter', lin_data.Jitter, ... 
'JitterAmount', lin_data.JitterAmount, ... 
'LineWidth', lin_data.LineWidth, ... 
'Marker', lin_data.Marker, ... 
'MarkerEdgeColor', lin_data.MarkerEdgeColor, ... 
'MarkerFaceColor', lin_data.MarkerFaceColor, ... 
'SizeData', lin_data.SizeData, ... 
'SizeDataSource', lin_data.SizeDataSource, ... 
'XData', lin_data.XData, ... 
'XDataSource', lin_data.XDataSource, ... 
'YData', lin_data.YData, ... 
'YDataSource', lin_data.YDataSource, ... 
'ZData', lin_data.ZData, ... 
'ZDataSource', lin_data.ZDataSource, ... 
'SelectionHandleMode', lin_data.SelectionHandleMode) 

上述代码有效。但是,如果我直接传递lin_data变量,则返回一个错误:

scatter(1,1,lin_data) 

Error using double 
Conversion to double from struct is not possible. 

Error in datachk (line 11) 
    y = full(double(x)); 

Error in datachk (line 9) 
    y = cellfun(@datachk,x,'UniformOutput',false); 

Error in scatter (line 55) 
dataargs = datachk(args(1:nargs)); 

lin_data是一个结构。有任何想法吗?

编辑:它的工作原理,如果我用set,但我还是不明白,为什么经过结构直接不起作用。顺便说一句,如果我用plot它与传递结构作为参数

h = scatter(1,1); 
h.set(lin_data); 

回答

0

这似乎是scatter功能的限制。为了验证参数,scatter呼叫:

58 dataargs = datachk(args(1:nargs)); 

其中datachk.m简单地是(对于非细胞输入)

11 y = full(double(x)); 

其将输入到非稀疏双值。如果你传递一个结构来scatter,它会与你在问题中张贴的错误失败在那里。 长话短说:Mathworks公司的方式,不允许对结构输入创建scatter

为了能够通过选项的结构,你可以使用你已经有解决方案:

set(h,lin_data); 

或结构转换为一个单元阵列并通过电池阵列:

c_lin_data(1,:) = fieldnames(lin_data); 
c_lin_data(2,:) = struct2cell(lin_data); 
scatter(1,1,c_lin_data{:});