13
13
% -INITIALIZATIONS-%
14
14
axisData = get(ancestor(plotData .Parent ,' axes' ));
15
15
figureData = get(ancestor(plotData .Parent ,' figure' ));
16
- marker = struct();
17
16
17
+ marker = struct();
18
18
marker.sizeref = 1 ;
19
19
marker.sizemode = ' area' ;
20
- marker.size = plotData .SizeData ;
21
- marker.line.width = plotData .LineWidth ;
22
-
23
- markerFaceColor = plotData .MarkerFaceColor ;
24
- markerFaceAlpha = plotData .MarkerFaceAlpha ;
25
- markerEdgeColor = plotData .MarkerEdgeColor ;
26
- markerEdgeAlpha = plotData .MarkerEdgeAlpha ;
27
- cData = plotData .CData ;
28
-
29
- colorMap = axisData .Colormap ;
30
- cLim = axisData .CLim ;
20
+ marker.size = getmarkerSize(plotData );
21
+ marker.line.width = 1.5 * plotData .LineWidth ;
31
22
32
23
filledMarkerSet = {' o' , ' square' , ' s' , ' diamond' , ' d' , ' v' , ' ^' , ...
33
24
' <' , ' >' , ' hexagram' , ' pentagram' };
34
25
filledMarker = ismember(plotData .Marker , filledMarkerSet );
35
- nColors = size(colorMap , 1 );
36
26
37
27
% -------------------------------------------------------------------------%
38
28
73
63
74
64
% -------------------------------------------------------------------------%
75
65
76
- % -get marker fillColor-%
66
+ % -marker fill-%
67
+ markerFaceColor = plotData .MarkerFaceColor ;
68
+ markerFaceAlpha = plotData .MarkerFaceAlpha ;
69
+
77
70
if filledMarker
78
71
72
+ % -get face color-%
79
73
if isnumeric(markerFaceColor )
80
- fillColor = sprintf(' rgb(%f ,%f ,%f )' , 255 * markerFaceColor );
74
+ faceColor = sprintf(' rgb(%f ,%f ,%f )' , 255 * markerFaceColor );
81
75
82
76
else
83
77
switch markerFaceColor
84
78
85
79
case ' none'
86
- fillColor = ' rgba(0,0,0,0)' ;
80
+ faceColor = ' rgba(0,0,0,0)' ;
87
81
88
82
case ' auto'
89
83
if ~strcmp(axisData .Color ,' none' )
90
- fillColor = 255 * axisData .Color ;
84
+ faceColor = 255 * axisData .Color ;
91
85
else
92
- fillColor = 255 * figureData .Color ;
86
+ faceColor = 255 * figureData .Color ;
93
87
end
94
88
95
- fillColor = sprintf( ' rgb( %f , %f , %f ) ' , fillColor );
89
+ faceColor = getStringColor( faceColor );
96
90
97
91
case ' flat'
92
+ faceColor = getScatterFlatColor(plotData , axisData );
98
93
99
- for n = 1 : size(cData , 1 )
100
- if size(cData , 2 ) == 1
101
- cIndex = max( min( cData(n ), cLim(2 ) ), cLim(1 ) );
102
- scaleColor = (cIndex - cLim(1 )) / diff(cLim );
103
- cIndex = 1 + floor(scaleColor *(nColors - 1 ));
104
- numColor = 255 * colorMap(cIndex , : );
105
-
106
- elseif size(cData , 2 ) == 3
107
- numColor = 255 * cData(n , : );
108
- end
109
-
110
- fillColor{n } = sprintf(' rgb(%f ,%f ,%f )' , numColor );
111
- end
94
+ end
95
+ end
112
96
97
+ % -get face alpha-%
98
+ if isnumeric(markerFaceAlpha )
99
+ faceAlpha = markerFaceAlpha ;
100
+ else
101
+ switch markerFaceColor
102
+
103
+ case ' none'
104
+ faceAlpha = 1 ;
105
+
106
+ case ' flat'
107
+ aLim = axisData .ALim ;
108
+ faceAlpha = plotData .AlphaData ;
109
+ faceAlpha = rescaleData(faceAlpha , aLim );
113
110
end
114
111
end
115
112
116
- marker.color = fillColor ;
117
- marker.opacity = markerFaceAlpha ;
113
+ % -set marker fill-%
114
+ marker.color = faceColor ;
115
+ marker.opacity = faceAlpha ;
118
116
119
117
end
120
118
121
119
% -------------------------------------------------------------------------%
122
120
123
- % -get marker lineColor-%
121
+ % -marker line-%
122
+ markerEdgeColor = plotData .MarkerEdgeColor ;
123
+ markerEdgeAlpha = plotData .MarkerEdgeAlpha ;
124
+
124
125
if isnumeric(markerEdgeColor )
125
126
lineColor = sprintf(' rgb(%f ,%f ,%f )' , 255 * markerEdgeColor );
126
127
131
132
lineColor = ' rgba(0,0,0,0)' ;
132
133
133
134
case ' auto'
134
-
135
- EdgeColor = plotData .EdgeColor ;
136
135
137
136
if ~strcmp(axisData .Color ,' none' )
138
137
lineColor = 255 * axisData .Color ;
139
138
else
140
139
lineColor = 255 * figureData .Color ;
141
140
end
142
141
143
- lineColor = sprintf(' rgba(%f ,%f ,%f ,%f )' , lineColor , ...
144
- markerEdgeAlpha );
142
+ lineColor = getStringColor(lineColor , markerEdgeAlpha );
145
143
146
144
case ' flat'
147
-
148
- for n = 1 : size(cData , 1 )
149
- if size(cData , 2 ) == 1
150
- cIndex = max( min( cData(n ), cLim(2 ) ), cLim(1 ) );
151
- scaleColor = (cIndex - cLim(1 )) / diff(cLim );
152
- cIndex = 1 + floor(scaleColor *(nColors - 1 ));
153
- numColor = 255 * colorMap(cIndex , : );
154
-
155
- elseif size(cData , 2 ) == 3
156
- numColor = 255 * cData(n , : );
157
- end
158
145
159
- lineColor{n } = sprintf(' rgba(%f ,%f ,%f ,%f )' , numColor , ...
160
- markerEdgeAlpha );
161
- end
146
+ lineColor = getScatterFlatColor(plotData , axisData );
162
147
163
148
end
164
149
end
171
156
172
157
% -------------------------------------------------------------------------%
173
158
end
159
+
160
+ function flatColor = getScatterFlatColor(plotData , axisData , opacity )
161
+
162
+ % -------------------------------------------------------------------------%
163
+
164
+ cData = plotData .CData ;
165
+ colorMap = axisData .Colormap ;
166
+ cLim = axisData .CLim ;
167
+ nColors = size(colorMap , 1 );
168
+ cDataByIndex = false ;
169
+
170
+ if isvector(cData )
171
+ lenCData = length(cData );
172
+ nMarkers = length(plotData .XData );
173
+ cDataByIndex = lenCData == nMarkers || lenCData == 1 ;
174
+ end
175
+
176
+ % -------------------------------------------------------------------------%
177
+
178
+ if cDataByIndex
179
+ cMapInd = getcMapInd(cData , cLim , nColors );
180
+ numColor = 255 * colorMap(cMapInd , : );
181
+ else
182
+ numColor = 255 * cData ;
183
+ end
184
+
185
+ if size(numColor , 1 ) == 1
186
+ flatColor = getStringColor(numColor );
187
+
188
+ else
189
+ for n = 1 : size(numColor , 1 )
190
+ flatColor{n } = getStringColor(numColor(n , : ));
191
+ end
192
+ end
193
+
194
+ % -------------------------------------------------------------------------%
195
+ end
196
+
197
+ function cMapInd = getcMapInd(cData , cLim , nColors )
198
+ scaledCData = rescaleData(cData , cLim );
199
+ cMapInd = 1 + floor(scaledCData *(nColors - 1 ));
200
+ end
201
+
202
+ function outData = rescaleData(inData , dataLim )
203
+ outData = max( min( inData , dataLim(2 ) ), dataLim(1 ) );
204
+ outData = (outData - dataLim(1 )) / diff(dataLim );
205
+ end
206
+
207
+ function markerSize = getmarkerSize(plotData )
208
+ markerSize = plotData .SizeData ;
209
+
210
+ if length(markerSize ) == 1
211
+ markerSize = markerSize * ones(size(plotData .XData ));
212
+ end
213
+ end
0 commit comments