1
1
function updateLineseries(obj , plotIndex )
2
2
3
- % ----SCATTER FIELDS----%
4
-
5
- % x - [DONE]
6
- % y - [DONE]
7
- % r - [HANDLED BY SCATTER]
8
- % t - [HANDLED BY SCATTER]
9
- % mode - [DONE]
10
- % name - [NOT SUPPORTED IN MATLAB]
11
- % text - [DONE]
12
- % error_y - [HANDLED BY ERRORBAR]
13
- % error_x - [NOT SUPPORTED IN MATLAB]
14
- % connectgaps - [NOT SUPPORTED IN MATLAB]
15
- % fill - [HANDLED BY AREA]
16
- % fillcolor - [HANDLED BY AREA]
17
- % opacity --- [TODO]
18
- % textfont - [NOT SUPPORTED IN MATLAB]
19
- % textposition - [NOT SUPPORTED IN MATLAB]
20
- % xaxis [DONE]
21
- % yaxis [DONE]
22
- % showlegend [DONE]
23
- % stream - [HANDLED BY PLOTLYSTREAM]
24
- % visible [DONE]
25
- % type [DONE]
26
-
27
- % MARKER
28
- % marler.color - [DONE]
29
- % marker.size - [DONE]
30
- % marker.line.color - [DONE]
31
- % marker.line.width - [DONE]
32
- % marker.line.dash - [NOT SUPPORTED IN MATLAB]
33
- % marker.line.opacity - [NOT SUPPORTED IN MATLAB]
34
- % marker.line.smoothing - [NOT SUPPORTED IN MATLAB]
35
- % marker.line.shape - [NOT SUPPORTED IN MATLAB]
36
- % marker.opacity --- [TODO]
37
- % marker.colorscale - [NOT SUPPORTED IN MATLAB]
38
- % marker.sizemode - [NOT SUPPORTED IN MATLAB]
39
- % marker.sizeref - [NOT SUPPORTED IN MATLAB]
40
- % marker.maxdisplayed - [NOT SUPPORTED IN MATLAB]
41
-
42
- % LINE
43
-
44
- % line.color - [DONE]
45
- % line.width - [DONE]
46
- % line.dash - [DONE]
47
- % line.opacity --- [TODO]
48
- % line.smoothing - [NOT SUPPORTED IN MATLAB]
49
- % line.shape - [NOT SUPPORTED IN MATLAB]
50
-
51
3
% -------------------------------------------------------------------------%
52
4
53
- % -AXIS INDEX-%
54
- axIndex = obj .getAxisIndex(obj .State .Plot(plotIndex ).AssociatedAxis);
5
+ % -INITIALIZATIONS-%
55
6
56
- % -PLOT DATA STRUCTURE- %
7
+ axIndex = obj .getAxisIndex( obj . State .Plot( plotIndex ).AssociatedAxis);
57
8
plotData = get(obj .State .Plot(plotIndex ).Handle);
58
9
59
- % -CHECK FOR MULTIPLE AXES -%
10
+ % -check for multiple axes -%
60
11
try
61
12
for yax = 1 : 2
62
- yaxIndex(yax ) = sum(plotData .Parent .YAxis(yax ).Color == plotData .Color );
13
+ yAxisColor = plotData .Parent .YAxis(yax ).Color;
14
+ yaxIndex(yax ) = sum(yAxisColor == plotData .Color );
63
15
end
64
16
65
17
[~ , yaxIndex ] = max(yaxIndex );
66
- [xsource , ysource ] = findSourceAxis(obj , axIndex , yaxIndex );
18
+ [xSource , ySource ] = findSourceAxis(obj , axIndex , yaxIndex );
67
19
68
20
catch
69
- [xsource , ysource ] = findSourceAxis(obj ,axIndex );
21
+ [xSource , ySource ] = findSourceAxis(obj ,axIndex );
70
22
end
71
23
72
- % -AXIS DATA -%
73
- eval([ ' xaxis = obj.layout.xaxis ' num2str( xsource ) ' ; ' ] );
74
- eval([ ' yaxis = obj.layout.yaxis ' num2str( ysource ) ' ; ' ] );
24
+ % -check if polar plot -%
25
+ treatAs = lower( obj .PlotOptions . TreatAs );
26
+ isPolar = ismember( ' compass ' , treatAs ) || ismember( ' ezpolar ' , treatAs );
75
27
76
- % -------------------------------------------------------------------------%
77
-
78
- % -if polar plot or not-%
79
- treatAs = obj .PlotOptions .TreatAs ;
80
- isPolar = ismember(' compass' , lower(treatAs )) || ismember(' ezpolar' , lower(treatAs ));
81
-
82
- % -------------------------------------------------------------------------%
83
-
84
- % -getting data-%
85
- xData = plotData .XData ;
86
- yData = plotData .YData ;
87
-
88
- if isduration(xData ) || isdatetime(xData ), xData = datenum(xData ); end
89
- if isduration(yData ) || isdatetime(yData ), yData = datenum(yData ); end
90
-
91
- % -------------------------------------------------------------------------%
28
+ % -check is 3D plot-%
29
+ try
30
+ isPlot3D = isfield(plotData ,' ZData' );
31
+ isPlot3D = isPlot3D & ~isempty(plotData .ZData );
32
+ catch
33
+ isPlot3D = false ;
34
+ end
92
35
93
- % -scatter xaxis-%
94
- obj.data{plotIndex }.xaxis = [' x' num2str(xsource )];
36
+ % -get trace data-%
37
+ xData = date2NumData(plotData .XData );
38
+ yData = date2NumData(plotData .YData );
95
39
96
- % -------------------------------------------------------------------------%
40
+ if isPolar
41
+ rData = sqrt(xData .^ 2 + yData .^ 2 );
42
+ thetaData = atan2(xData , yData );
43
+ thetaData = -(rad2deg(thetaData ) - 90 );
44
+ end
97
45
98
- % -scatter yaxis-%
99
- obj.data{plotIndex }.yaxis = [' y' num2str(ysource )];
46
+ if isPlot3D
47
+ zData = date2NumData(plotData .ZData );
48
+ end
100
49
101
50
% -------------------------------------------------------------------------%
102
51
103
- % -scatter type-%
104
- obj.data{plotIndex }.type = ' scatter' ;
105
-
52
+ % -set trace-%
106
53
if isPolar
107
54
obj.data{plotIndex }.type = ' scatterpolar' ;
108
- end
109
55
110
- % -------------------------------------------------------------------------%
56
+ elseif ~isPlot3D
57
+ obj.data{plotIndex }.type = ' scatter' ;
58
+ obj.data{plotIndex }.xaxis = sprintf(' x%d ' , xSource );
59
+ obj.data{plotIndex }.yaxis = sprintf(' y%d ' , ySource );
60
+ else
61
+ obj.data{plotIndex }.type = ' scatter3d' ;
62
+ obj.data{plotIndex }.scene = sprintf(' scene%d ' , xSource );
63
+
64
+ updateScene(obj , plotIndex );
65
+ end
111
66
112
- % -scatter visible-%
113
67
obj.data{plotIndex }.visible = strcmp(plotData .Visible ,' on' );
68
+ obj.data{plotIndex }.name = plotData .DisplayName ;
69
+ obj.data{plotIndex }.mode = getScatterMode(plotData );
114
70
115
71
% -------------------------------------------------------------------------%
116
72
117
- % -scatter x-%
118
-
73
+ % -set trace data-%
119
74
if isPolar
120
- rData = sqrt(x .^ 2 + y .^ 2 );
121
75
obj.data{plotIndex }.r = rData ;
76
+ obj.data{plotIndex }.theta = thetaData ;
122
77
else
123
78
obj.data{plotIndex }.x = xData ;
124
- end
125
-
126
- % -------------------------------------------------------------------------%
127
-
128
- % -scatter y-%
129
- if isPolar
130
- thetaData = atan2(xData ,yData );
131
- obj.data{plotIndex }.theta = -(rad2deg(thetaData ) - 90 );
132
- else
133
79
obj.data{plotIndex }.y = yData ;
134
- end
135
-
136
- % -------------------------------------------------------------------------%
137
-
138
- % -Fro 3D plots-%
139
- obj.PlotOptions.is3d = false ; % by default
140
80
141
- if isfield(plotData ,' ZData' )
142
- zData = plotData .ZData ;
143
- if isduration(zData ) || isdatetime(zData ), zData = datenum(zData ); end
144
-
145
- numbset = unique(zData );
146
-
147
- if any(zData ) && length(numbset )>1
148
- % -scatter z-%
81
+ if isPlot3D
149
82
obj.data{plotIndex }.z = zData ;
150
-
151
- % -overwrite type-%
152
- obj.data{plotIndex }.type = ' scatter3d' ;
153
- obj.data{plotIndex }.scene = sprintf(' scene%d ' , xsource );
154
-
155
- updateScene(obj , plotIndex );
156
-
157
- % -flag to manage 3d plots-%
158
83
obj.PlotOptions.is3d = true ;
159
84
end
160
85
end
161
86
162
87
% -------------------------------------------------------------------------%
163
88
164
- % -scatter name-%
165
- obj.data{plotIndex }.name = plotData .DisplayName ;
166
-
167
- % -------------------------------------------------------------------------%
168
-
169
- % -scatter mode-%
170
- if ~strcmpi(' none' , plotData .Marker ) ...
171
- && ~strcmpi(' none' , plotData .LineStyle )
172
- mode = ' lines+markers' ;
173
- elseif ~strcmpi(' none' , plotData .Marker )
174
- mode = ' markers' ;
175
- elseif ~strcmpi(' none' , plotData .LineStyle )
176
- mode = ' lines' ;
177
- else
178
- mode = ' none' ;
179
- end
180
-
181
- obj.data{plotIndex }.mode = mode ;
182
-
183
- % -------------------------------------------------------------------------%
184
-
185
- % -scatter line-%
89
+ % -set trace line-%
186
90
obj.data{plotIndex }.line = extractLineLine(plotData );
187
91
188
- % -------------------------------------------------------------------------%
189
-
190
- % -scatter marker-%
92
+ % -set trace marker-%
191
93
obj.data{plotIndex }.marker = extractLineMarker(plotData );
192
94
193
- % -------------------------------------------------------------------------%
194
-
195
- % -scatter showlegend-%
196
- leg = get(plotData .Annotation );
197
- legInfo = get(leg .LegendInformation );
198
-
199
- switch legInfo .IconDisplayStyle
200
- case ' on'
201
- showLeg = true ;
202
- case ' off'
203
- showLeg = false ;
204
- end
205
-
206
- obj.data{plotIndex }.showlegend = showLeg ;
207
-
208
- if isempty(obj.data{plotIndex }.name)
209
- obj.data{plotIndex }.showlegend = false ;
210
- end
95
+ % -set trace legend-%
96
+ obj.data{plotIndex }.showlegend = getShowLegend(plotData );
211
97
212
98
% -------------------------------------------------------------------------%
213
99
end
@@ -230,7 +116,10 @@ function updateScene(obj, dataIndex)
230
116
dataAspectRatio = axisData .DataAspectRatio ;
231
117
cameraUpVector = axisData .CameraUpVector ;
232
118
cameraEye = cameraPosition ./ dataAspectRatio ;
233
- normFac = 0.7 * abs(min(cameraEye ));
119
+
120
+ cameraOffset = 0.5 ;
121
+ normFac = abs(min(cameraEye ));
122
+ normFac = normFac / (max(aspectRatio )/min(aspectRatio ) + cameraOffset );
234
123
235
124
% -------------------------------------------------------------------------%
236
125
@@ -240,9 +129,9 @@ function updateScene(obj, dataIndex)
240
129
scene.aspectratio.z = 1.0 * aspectRatio(3 );
241
130
242
131
% -camera eye-%
243
- scene.camera.eye.x = cameraEye(1 ) / normFac ;
244
- scene.camera.eye.y = cameraEye(2 ) / normFac ;
245
- scene.camera.eye.z = cameraEye(3 ) / normFac ;
132
+ scene.camera.eye.x = cameraEye(1 )/ normFac ;
133
+ scene.camera.eye.y = cameraEye(2 )/ normFac ;
134
+ scene.camera.eye.z = cameraEye(3 )/ normFac ;
246
135
247
136
% -camera up-%
248
137
scene.camera.up.x = cameraUpVector(1 );
0 commit comments