2015-11-17 52 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{:});