Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 565d8a0

Browse files
Merge pull request #461 from plotly/fix_issue_437
fix issue #437
2 parents 362b053 + 9767f7f commit 565d8a0

File tree

3 files changed

+111
-84
lines changed

3 files changed

+111
-84
lines changed

plotly/plotlyfig_aux/handlegraphics/updateScatter.m

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ function updateScatter(obj,plotIndex)
77
[xSource, ySource] = findSourceAxis(obj,axIndex);
88
plotData = get(obj.State.Plot(plotIndex).Handle);
99

10+
%-check is 3D scatter-%
1011
try
1112
isScatter3D = isfield(plotData,'ZData');
1213
isScatter3D = isScatter3D & ~isempty(plotData.ZData);
@@ -34,7 +35,7 @@ function updateScatter(obj,plotIndex)
3435

3536
%-------------------------------------------------------------------------%
3637

37-
%-set plot data-%
38+
%-set trace data-%
3839
obj.data{plotIndex}.x = plotData.XData;
3940
obj.data{plotIndex}.y = plotData.YData;
4041

@@ -44,39 +45,17 @@ function updateScatter(obj,plotIndex)
4445

4546
%-------------------------------------------------------------------------%
4647

47-
%-set marker property-%
48+
%-set trace marker-%
4849
obj.data{plotIndex}.marker = extractScatterMarker(plotData);
49-
markerSize = obj.data{plotIndex}.marker.size;
50-
markerColor = obj.data{plotIndex}.marker.color;
51-
markerLineColor = obj.data{plotIndex}.marker.line.color;
5250

53-
if length(markerSize) == 1
54-
obj.data{plotIndex}.marker.size = markerSize * 0.11;
55-
end
56-
57-
if length(markerColor) == 1
58-
obj.data{plotIndex}.marker.color = markerColor{1};
59-
end
60-
61-
if length(markerLineColor) == 1
62-
obj.data{plotIndex}.marker.line.color = markerLineColor{1};
51+
if isScatter3D
52+
markerSize = obj.data{plotIndex}.marker.size;
53+
obj.data{plotIndex}.marker.size = 2*markerSize;
6354
end
64-
65-
%-------------------------------------------------------------------------%
6655

67-
%-set showlegend property-%
56+
%-set trace legend-%
6857
if isScatter3D
69-
leg = get(plotData.Annotation);
70-
legInfo = get(leg.LegendInformation);
71-
72-
switch legInfo.IconDisplayStyle
73-
case 'on'
74-
showleg = true;
75-
case 'off'
76-
showleg = false;
77-
end
78-
79-
obj.data{plotIndex}.showlegend = showleg;
58+
obj.data{plotIndex}.showlegend = getShowLegend(plotData);
8059
end
8160

8261
%-------------------------------------------------------------------------%

plotly/plotlyfig_aux/helpers/extractScatterMarker.m

Lines changed: 93 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,16 @@
1313
%-INITIALIZATIONS-%
1414
axisData = get(ancestor(plotData.Parent,'axes'));
1515
figureData = get(ancestor(plotData.Parent,'figure'));
16-
marker = struct();
1716

17+
marker = struct();
1818
marker.sizeref = 1;
1919
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;
3122

3223
filledMarkerSet = {'o', 'square', 's', 'diamond', 'd', 'v', '^', ...
3324
'<', '>', 'hexagram', 'pentagram'};
3425
filledMarker = ismember(plotData.Marker, filledMarkerSet);
35-
nColors = size(colorMap, 1);
3626

3727
%-------------------------------------------------------------------------%
3828

@@ -73,54 +63,65 @@
7363

7464
%-------------------------------------------------------------------------%
7565

76-
%-get marker fillColor-%
66+
%-marker fill-%
67+
markerFaceColor = plotData.MarkerFaceColor;
68+
markerFaceAlpha = plotData.MarkerFaceAlpha;
69+
7770
if filledMarker
7871

72+
%-get face color-%
7973
if isnumeric(markerFaceColor)
80-
fillColor = sprintf('rgb(%f,%f,%f)', 255*markerFaceColor);
74+
faceColor = sprintf('rgb(%f,%f,%f)', 255*markerFaceColor);
8175

8276
else
8377
switch markerFaceColor
8478

8579
case 'none'
86-
fillColor = 'rgba(0,0,0,0)';
80+
faceColor = 'rgba(0,0,0,0)';
8781

8882
case 'auto'
8983
if ~strcmp(axisData.Color,'none')
90-
fillColor = 255*axisData.Color;
84+
faceColor = 255*axisData.Color;
9185
else
92-
fillColor = 255*figureData.Color;
86+
faceColor = 255*figureData.Color;
9387
end
9488

95-
fillColor = sprintf('rgb(%f,%f,%f)', fillColor);
89+
faceColor = getStringColor(faceColor);
9690

9791
case 'flat'
92+
faceColor = getScatterFlatColor(plotData, axisData);
9893

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
11296

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);
113110
end
114111
end
115112

116-
marker.color = fillColor;
117-
marker.opacity = markerFaceAlpha;
113+
%-set marker fill-%
114+
marker.color = faceColor;
115+
marker.opacity = faceAlpha;
118116

119117
end
120118

121119
%-------------------------------------------------------------------------%
122120

123-
%-get marker lineColor-%
121+
%-marker line-%
122+
markerEdgeColor = plotData.MarkerEdgeColor;
123+
markerEdgeAlpha = plotData.MarkerEdgeAlpha;
124+
124125
if isnumeric(markerEdgeColor)
125126
lineColor = sprintf('rgb(%f,%f,%f)', 255*markerEdgeColor);
126127

@@ -131,34 +132,18 @@
131132
lineColor = 'rgba(0,0,0,0)';
132133

133134
case 'auto'
134-
135-
EdgeColor = plotData.EdgeColor;
136135

137136
if ~strcmp(axisData.Color,'none')
138137
lineColor = 255*axisData.Color;
139138
else
140139
lineColor = 255*figureData.Color;
141140
end
142141

143-
lineColor = sprintf('rgba(%f,%f,%f,%f)', lineColor, ...
144-
markerEdgeAlpha);
142+
lineColor = getStringColor(lineColor, markerEdgeAlpha);
145143

146144
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
158145

159-
lineColor{n} = sprintf('rgba(%f,%f,%f,%f)', numColor, ...
160-
markerEdgeAlpha);
161-
end
146+
lineColor = getScatterFlatColor(plotData, axisData);
162147

163148
end
164149
end
@@ -171,3 +156,58 @@
171156

172157
%-------------------------------------------------------------------------%
173158
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
Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
function stringColor = getStringColor(numColor)
1+
function stringColor = getStringColor(numColor, opacity)
22

3-
stringColor = sprintf('rgb(%f,%f,%f)', numColor);
3+
if nargin == 1
4+
stringColor = sprintf('rgb(%f,%f,%f)', numColor);
5+
6+
elseif nargin == 2
7+
stringColor = sprintf('rgba(%f,%f,%f,%f)', numColor, opacity);
8+
9+
else
10+
disp('Too many input arguments for getStringColor function.')
11+
end
412
end

0 commit comments

Comments
 (0)