Skip to content

Commit a9c9f9c

Browse files
Merge pull request #487 from plotly/support-opacity-settings
Add support for opacity settings
2 parents 9e5bdbf + b014890 commit a9c9f9c

File tree

3 files changed

+152
-169
lines changed

3 files changed

+152
-169
lines changed
Lines changed: 46 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,49 @@
11
function face = extractAreaFace(area_data)
2-
3-
% EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
4-
% OF TYPE "PATCH". THESE OBJECTS ARE USED IN AREASERIES
5-
% BARSERIES, CONTOURGROUP, SCATTERGROUP.
6-
7-
%-------------------------------------------------------------------------%
8-
9-
%-AXIS STRUCTURE-%
10-
axis_data = ancestor(area_data,'axes');
11-
12-
%-FIGURE STRUCTURE-%
13-
figure_data = ancestor(area_data,'figure');
14-
15-
%-------------------------------------------------------------------------%
16-
17-
%-INITIALIZE OUTPUT-%
18-
face = struct();
19-
20-
%-------------------------------------------------------------------------%
21-
22-
%--FACE FILL COLOR--%
23-
24-
%-figure colormap-%
25-
colormap = figure_data.Colormap;
26-
27-
% face face color
28-
MarkerColor = area_data.FaceColor;
29-
30-
if isnumeric(MarkerColor)
31-
col = 255*MarkerColor;
32-
facecolor = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
33-
else
34-
switch MarkerColor
35-
36-
case 'none'
37-
38-
facecolor = 'rgba(0,0,0,0)';
39-
40-
case 'flat'
41-
areaACData = area_data.getColorAlphaDataExtents;
42-
capCD = max(min(areaACData(1,1),axis_data.CLim(2)),axis_data.CLim(1));
43-
scalefactor = (capCD - axis_data.CLim(1))/diff(axis_data.CLim);
44-
col = 255*(colormap(1 + floor(scalefactor*(length(colormap)-1)),:));
45-
facecolor = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
2+
% EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
3+
% OF TYPE "PATCH". THESE OBJECTS ARE USED IN AREASERIES
4+
% BARSERIES, CONTOURGROUP, SCATTERGROUP.
5+
6+
%---------------------------------------------------------------------%
7+
8+
%-AXIS STRUCTURE-%
9+
axis_data = ancestor(area_data,"axes");
10+
11+
%-FIGURE STRUCTURE-%
12+
figure_data = ancestor(area_data,"figure");
13+
14+
%---------------------------------------------------------------------%
15+
16+
%-INITIALIZE OUTPUT-%
17+
face = struct();
18+
19+
%---------------------------------------------------------------------%
20+
21+
%--FACE FILL COLOR--%
22+
23+
%-figure colormap-%
24+
colormap = figure_data.Colormap;
25+
26+
% face face color
27+
MarkerColor = area_data.FaceColor;
28+
if isnumeric(MarkerColor)
29+
col = [255*MarkerColor area_data.FaceAlpha];
30+
facecolor = sprintf("rgba(%d,%d,%d,%f)", col);
31+
else
32+
switch MarkerColor
33+
case "none"
34+
facecolor = "rgba(0,0,0,0)";
35+
case "flat"
36+
areaACData = area_data.getColorAlphaDataExtents;
37+
capCD = max(min(areaACData(1,1),axis_data.CLim(2)), ...
38+
axis_data.CLim(1));
39+
scalefactor = (capCD - axis_data.CLim(1)) ...
40+
/ diff(axis_data.CLim);
41+
col = 255*(colormap(1 + floor(scalefactor ...
42+
* (length(colormap)-1)),:));
43+
col = [col area_data.FaceAlpha];
44+
facecolor = sprintf("rgba(%d,%d,%d,%f)", col);
45+
end
4646
end
47-
end
48-
49-
face.color = facecolor;
50-
51-
%-------------------------------------------------------------------------%
52-
47+
face.color = facecolor;
48+
%---------------------------------------------------------------------%
5349
end
Lines changed: 41 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,51 @@
11
function line = extractAreaLine(area_data)
2+
% EXTRACTS THE LINE STYLE USED FOR MATLAB OBJECTS
3+
% OF TYPE "LINE". THESE OBJECTS ARE USED IN LINESERIES,
4+
% STAIRSERIES, STEMSERIES, BASELINESERIES, AND BOXPLOTS
25

3-
% EXTRACTS THE LINE STYLE USED FOR MATLAB OBJECTS
4-
% OF TYPE "LINE". THESE OBJECTS ARE USED IN LINESERIES,
5-
% STAIRSERIES, STEMSERIES, BASELINESERIES, AND BOXPLOTS
6+
%---------------------------------------------------------------------%
67

7-
%-------------------------------------------------------------------------%
8+
%-INITIALIZE OUTPUT-%
9+
line = struct();
810

9-
%-INITIALIZE OUTPUT-%
10-
line = struct();
11+
%---------------------------------------------------------------------%
1112

12-
%-------------------------------------------------------------------------%
13+
%-AREA LINE COLOR-%
1314

14-
%-AREA LINE COLOR-%
15+
if area_data.LineStyle~="none"
16+
% marker edge color
17+
LineColor = area_data.EdgeColor;
1518

16-
if(~strcmp(area_data.LineStyle,'none'))
17-
18-
% marker edge color
19-
LineColor = area_data.EdgeColor;
20-
21-
if isnumeric(LineColor)
22-
col = 255*LineColor;
23-
linecolor = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
24-
else
25-
linecolor = 'rgba(0,0,0,0)';
26-
end
27-
28-
line.color = linecolor;
29-
30-
%-------------------------------------------------------------------------%
31-
32-
%-PATCH LINE WIDTH (STYLE)-%
33-
line.width = area_data.LineWidth;
34-
35-
%-------------------------------------------------------------------------%
36-
37-
%-PATCH LINE DASH (STYLE)-%
38-
switch area_data.LineStyle
39-
case '-'
40-
LineStyle = 'solid';
41-
case '--'
42-
LineStyle = 'dash';
43-
case ':'
44-
LineStyle = 'dot';
45-
case '-.'
46-
LineStyle = 'dashdot';
47-
end
48-
49-
line.dash = LineStyle;
50-
51-
%-------------------------------------------------------------------------%
19+
if isnumeric(LineColor)
20+
col = [255*LineColor area_data.EdgeAlpha];
21+
linecolor = sprintf("rgba(%d,%d,%d,%f)", col);
22+
else
23+
linecolor = "rgba(0,0,0,0)";
24+
end
5225

53-
end
54-
end
26+
line.color = linecolor;
27+
28+
%-----------------------------------------------------------------%
5529

30+
%-PATCH LINE WIDTH (STYLE)-%
31+
line.width = area_data.LineWidth;
5632

33+
%-----------------------------------------------------------------%
34+
35+
%-PATCH LINE DASH (STYLE)-%
36+
switch area_data.LineStyle
37+
case "-"
38+
LineStyle = "solid";
39+
case "--"
40+
LineStyle = "dash";
41+
case ":"
42+
LineStyle = "dot";
43+
case "-."
44+
LineStyle = "dashdot";
45+
end
46+
47+
line.dash = LineStyle;
48+
49+
%-----------------------------------------------------------------%
50+
end
51+
end
Lines changed: 65 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,81 @@
11
function marker = extractPatchFace(patch_data)
2-
% EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
3-
% OF TYPE "PATCH". THESE OBJECTS ARE USED BOXPLOTS.
2+
% EXTRACTS THE FACE STYLE USED FOR MATLAB OBJECTS
3+
% OF TYPE "PATCH". THESE OBJECTS ARE USED BOXPLOTS.
44

5-
%-------------------------------------------------------------------------%
5+
%-------------------------------------------------------------------------%
66

7-
%-AXIS STRUCTURE-%
8-
axis_data = ancestor(patch_data.Parent,'axes');
7+
%-AXIS STRUCTURE-%
8+
axis_data = ancestor(patch_data.Parent,"axes");
99

10-
%-FIGURE STRUCTURE-%
11-
figure_data = ancestor(patch_data.Parent,'figure');
10+
%-FIGURE STRUCTURE-%
11+
figure_data = ancestor(patch_data.Parent,"figure");
1212

13-
%-INITIALIZE OUTPUT-%
14-
marker = struct();
13+
%-INITIALIZE OUTPUT-%
14+
marker = struct();
1515

16-
%-------------------------------------------------------------------------%
16+
%-------------------------------------------------------------------------%
1717

18-
%-PATCH EDGE WIDTH-%
19-
marker.line.width = patch_data.LineWidth;
18+
%-PATCH EDGE WIDTH-%
19+
marker.line.width = patch_data.LineWidth;
2020

21-
%-------------------------------------------------------------------------%
21+
%-------------------------------------------------------------------------%
2222

23-
%-PATCH FACE COLOR-%
23+
%-PATCH FACE COLOR-%
2424

25-
colormap = figure_data.Colormap;
25+
colormap = figure_data.Colormap;
2626

27-
if isnumeric(patch_data.FaceColor)
28-
29-
%-paper_bgcolor-%
30-
col = 255*patch_data.FaceColor;
31-
marker.color = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
32-
33-
else
34-
switch patch_data.FaceColor
35-
36-
case 'none'
37-
marker.color = 'rgba(0,0,0,0)';
38-
39-
case {'flat','interp'}
40-
41-
switch patch_data.CDataMapping
42-
43-
case 'scaled'
44-
capCD = max(min(patch_data.FaceVertexCData(1,1),axis_data.CLim(2)),axis_data.CLim(1));
45-
scalefactor = (capCD -axis_data.CLim(1))/diff(axis_data.CLim);
46-
col = 255*(colormap(1+ floor(scalefactor*(length(colormap)-1)),:));
47-
case 'direct'
48-
col = 255*(colormap(patch_data.FaceVertexCData(1,1),:));
49-
50-
end
51-
52-
marker.color = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
53-
54-
case 'auto'
55-
marker.color = 'rgb(0,113.985,188.955)';
27+
if isnumeric(patch_data.FaceColor)
28+
%-paper_bgcolor-%
29+
col = [255*patch_data.FaceColor patch_data.FaceAlpha];
30+
marker.color = sprintf("rgba(%d,%d,%d,%f)", col);
31+
else
32+
switch patch_data.FaceColor
33+
case "none"
34+
col = [0 0 0 0];
35+
case {"flat","interp"}
36+
switch patch_data.CDataMapping
37+
case "scaled"
38+
capCD = max(min(patch_data.FaceVertexCData(1,1), ...
39+
axis_data.CLim(2)),axis_data.CLim(1));
40+
scalefactor = (capCD -axis_data.CLim(1)) ...
41+
/ diff(axis_data.CLim);
42+
col = 255*(colormap(1+ floor(scalefactor ...
43+
* (length(colormap)-1)),:));
44+
case "direct"
45+
col = 255*(colormap(patch_data.FaceVertexCData(1,1),:));
46+
end
47+
col = [col patch_data.FaceAlpha];
48+
case "auto"
49+
col = 255*patch_data.Parent.ColorOrder( ...
50+
patch_data.Parent.ColorOrderIndex-1,:);
51+
col = [col patch_data.FaceAlpha];
52+
end
53+
marker.color = sprintf("rgba(%d,%d,%d,%f)", col);
5654
end
57-
end
5855

59-
%-------------------------------------------------------------------------%
56+
%-------------------------------------------------------------------------%
6057

61-
%-PATCH EDGE COLOR-%
62-
if isnumeric(patch_data.EdgeColor)
63-
64-
col = 255*patch_data.EdgeColor;
65-
marker.line.color = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
66-
else
67-
switch patch_data.EdgeColor
68-
69-
case 'none'
70-
marker.line.color = 'rgba(0,0,0,0,)';
71-
72-
case 'flat'
73-
74-
switch patch_data.CDataMapping
75-
76-
case 'scaled'
77-
capCD = max(min(patch_data.FaceVertexCData(1,1),axis_data.CLim(2)),axis_data.CLim(1));
78-
scalefactor = (capCD -axis_data.CLim(1))/diff(axis_data.CLim);
79-
col = 255*(colormap(1+floor(scalefactor*(length(colormap)-1)),:));
80-
81-
case 'direct'
82-
col = 255*(colormap(patch_data.FaceVertexCData(1,1),:));
83-
84-
end
85-
86-
marker.line.color = ['rgb(' num2str(col(1)) ',' num2str(col(2)) ',' num2str(col(3)) ')'];
58+
%-PATCH EDGE COLOR-%
59+
if isnumeric(patch_data.EdgeColor)
60+
col = [255*patch_data.EdgeColor patch_data.EdgeAlpha];
61+
else
62+
switch patch_data.EdgeColor
63+
case "none"
64+
col = [0 0 0 0];
65+
case "flat"
66+
switch patch_data.CDataMapping
67+
case "scaled"
68+
capCD = max(min(patch_data.FaceVertexCData(1,1), ...
69+
axis_data.CLim(2)),axis_data.CLim(1));
70+
scalefactor = (capCD - axis_data.CLim(1)) ...
71+
/ diff(axis_data.CLim);
72+
col = 255*(colormap(1+floor(scalefactor ...
73+
* (length(colormap)-1)),:));
74+
case "direct"
75+
col = 255*(colormap(patch_data.FaceVertexCData(1,1),:));
76+
end
77+
col = [col patch_data.EdgeAlpha];
78+
end
8779
end
88-
end
80+
marker.line.color = sprintf("rgba(%d,%d,%d,%f)", col);
8981
end

0 commit comments

Comments
 (0)