Skip to content

Commit cd2035e

Browse files
Merge pull request #495 from plotly/support-area-plots
Improve support for 'area' plots
2 parents 97b0122 + 4f7d579 commit cd2035e

File tree

1 file changed

+137
-146
lines changed

1 file changed

+137
-146
lines changed
Lines changed: 137 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,163 +1,154 @@
11
function updateArea(obj,areaIndex)
2-
3-
% x: ...[DONE]
4-
% y: ...[DONE]
5-
% r: ...[NOT SUPPORTED IN MATLAB]
6-
% t: ...[NOT SUPPORTED IN MATLAB]
7-
% mode: ...[DONE]
8-
% name: ...[DONE]
9-
% text: ...[NOT SUPPORTED IN MATLAB]
10-
% error_y: ...[HANDLED BY ERRORBAR]
11-
% error_x: ...[HANDLED BY ERRORBAR]
12-
13-
%----marker----%
14-
15-
% color: ...[NA]
16-
% size: ...[NA]
17-
% symbol: ...[NA]
18-
% opacity: ...[NA]
19-
% sizeref: ...[NA]
20-
% sizemode: ...[NA]
21-
% colorscale: ...[NA]
22-
% cauto: ...[NA]
23-
% cmin: ...[NA]
24-
% cmax: ...[NA]
25-
% outliercolor: ...[NA]
26-
% maxdisplayed: ...[NA]
27-
28-
%----marker line----%
29-
30-
% color: ...[NA]
31-
% width: ...[NA]
32-
% dash: ...[NA]
33-
% opacity: ...[NA]
34-
% shape: ...[NA]
35-
% smoothing: ...[NA]
36-
% outliercolor: ...[NA]
37-
% outlierwidth: ...[NA]
38-
39-
%----line----%
40-
% color: .........[TODO]
41-
% width: .........[TODO]
42-
% dash: .........[TODO]
43-
% opacity: .........[TODO]
44-
% shape: ...[NA]
45-
% smoothing: ...[NA]
46-
% outliercolor: ...[NA]
47-
% outlierwidth: ...[NA]
48-
49-
% textposition: ...[NOT SUPPORTED IN MATLAB]
50-
% textfont: ...[NOT SUPPORTED IN MATLAB]
51-
% connectgaps: ...[NOT SUPPORTED IN MATLAB]
52-
% fill: ...[DONE]
53-
% fillcolor: ..........[TODO]
54-
% opacity: ..........[TODO]
55-
% xaxis: ...[DONE]
56-
% yaxis: ....[DONE]
57-
% showlegend: ...[DONE]
58-
% stream: ...[HANDLED BY PLOTLYSTREAM]
59-
% visible: ...[DONE]
60-
% type: ...[DONE]
61-
62-
%-------------------------------------------------------------------------%
63-
64-
%-store original area handle-%
65-
area_data = obj.State.Plot(areaIndex).Handle;
66-
67-
%------------------------------------------------------------------------%
68-
69-
%-get "children" using new HG2 approach-%
70-
area_child = area_data.java.firstDown;
71-
72-
%------------------------------------------------------------------------%
73-
74-
%-AXIS INDEX-%
75-
axIndex = obj.getAxisIndex(obj.State.Plot(areaIndex).AssociatedAxis);
76-
77-
%-CHECK FOR MULTIPLE AXES-%
78-
[xsource, ysource] = findSourceAxis(obj,axIndex);
79-
80-
%-------------------------------------------------------------------------%
81-
82-
%-area xaxis-%
83-
obj.data{areaIndex}.xaxis = ['x' num2str(xsource)];
84-
85-
%-------------------------------------------------------------------------%
86-
87-
%-area yaxis-%
88-
obj.data{areaIndex}.yaxis = ['y' num2str(ysource)];
89-
90-
%-------------------------------------------------------------------------%
91-
92-
%-area type-%
93-
obj.data{areaIndex}.type = 'scatter';
94-
95-
%-------------------------------------------------------------------------%
96-
97-
%-area x-%
98-
obj.data{areaIndex}.x = area_data.XData;
99-
100-
%-------------------------------------------------------------------------%
101-
102-
%-area y-%
103-
if areaIndex>1
104-
obj.data{areaIndex}.y = obj.data{areaIndex-1}.y + area_data.YData;
105-
else
106-
obj.data{areaIndex}.y = area_data.YData;
107-
end
108-
109-
%-------------------------------------------------------------------------%
110-
111-
%-area name-%
112-
if ~isempty(area_data.DisplayName);
113-
obj.data{areaIndex}.name = area_data.DisplayName;
114-
else
2+
% x: ...[DONE]
3+
% y: ...[DONE]
4+
% r: ...[NOT SUPPORTED IN MATLAB]
5+
% t: ...[NOT SUPPORTED IN MATLAB]
6+
% mode: ...[DONE]
7+
% name: ...[DONE]
8+
% text: ...[NOT SUPPORTED IN MATLAB]
9+
% error_y: ...[HANDLED BY ERRORBAR]
10+
% error_x: ...[HANDLED BY ERRORBAR]
11+
12+
%----marker----%
13+
% color: ...[NA]
14+
% size: ...[NA]
15+
% symbol: ...[NA]
16+
% opacity: ...[NA]
17+
% sizeref: ...[NA]
18+
% sizemode: ...[NA]
19+
% colorscale: ...[NA]
20+
% cauto: ...[NA]
21+
% cmin: ...[NA]
22+
% cmax: ...[NA]
23+
% outliercolor: ...[NA]
24+
% maxdisplayed: ...[NA]
25+
26+
%----marker line----%
27+
% color: ...[NA]
28+
% width: ...[NA]
29+
% dash: ...[NA]
30+
% opacity: ...[NA]
31+
% shape: ...[NA]
32+
% smoothing: ...[NA]
33+
% outliercolor: ...[NA]
34+
% outlierwidth: ...[NA]
35+
36+
%----line----%
37+
% color: .........[TODO]
38+
% width: .........[TODO]
39+
% dash: .........[TODO]
40+
% opacity: .........[TODO]
41+
% shape: ...[NA]
42+
% smoothing: ...[NA]
43+
% outliercolor: ...[NA]
44+
% outlierwidth: ...[NA]
45+
46+
% textposition: ...[NOT SUPPORTED IN MATLAB]
47+
% textfont: ...[NOT SUPPORTED IN MATLAB]
48+
% connectgaps: ...[NOT SUPPORTED IN MATLAB]
49+
% fill: ...[DONE]
50+
% fillcolor: ..........[TODO]
51+
% opacity: ..........[TODO]
52+
% xaxis: ...[DONE]
53+
% yaxis: ....[DONE]
54+
% showlegend: ...[DONE]
55+
% stream: ...[HANDLED BY PLOTLYSTREAM]
56+
% visible: ...[DONE]
57+
% type: ...[DONE]
58+
59+
%---------------------------------------------------------------------%
60+
61+
%-store original area handle-%
62+
area_data = obj.State.Plot(areaIndex).Handle;
63+
64+
%---------------------------------------------------------------------%
65+
66+
%-AXIS INDEX-%
67+
axIndex = obj.getAxisIndex(obj.State.Plot(areaIndex).AssociatedAxis);
68+
69+
%-CHECK FOR MULTIPLE AXES-%
70+
[xsource, ysource] = findSourceAxis(obj,axIndex);
71+
72+
%---------------------------------------------------------------------%
73+
74+
%-area axis-%
75+
obj.data{areaIndex}.xaxis = "x" + xsource;
76+
obj.data{areaIndex}.yaxis = "y" + ysource;
77+
78+
%---------------------------------------------------------------------%
79+
80+
%-area type-%
81+
obj.data{areaIndex}.type = "scatter";
82+
83+
%---------------------------------------------------------------------%
84+
85+
%-area x-%
86+
obj.data{areaIndex}.x = area_data.XData;
87+
88+
%---------------------------------------------------------------------%
89+
90+
%-area y-%
91+
prevAreaIndex = find(cellfun(@(x) isfield(x,"fill") ...
92+
&& isequal({x.xaxis x.yaxis},{obj.data{areaIndex}.xaxis ...
93+
obj.data{areaIndex}.yaxis}),obj.data(1:areaIndex-1)),1,"last");
94+
if ~isempty(prevAreaIndex)
95+
obj.data{areaIndex}.y = obj.data{prevAreaIndex}.y + area_data.YData;
96+
else
97+
obj.data{areaIndex}.y = area_data.YData;
98+
end
99+
100+
%---------------------------------------------------------------------%
101+
102+
%-area name-%
115103
obj.data{areaIndex}.name = area_data.DisplayName;
116-
end
117104

118-
%-------------------------------------------------------------------------%
105+
%---------------------------------------------------------------------%
119106

120-
%-area visible-%
121-
obj.data{areaIndex}.visible = strcmp(area_data.Visible,'on');
107+
%-area visible-%
108+
obj.data{areaIndex}.visible = strcmp(area_data.Visible, "on");
122109

123-
%-------------------------------------------------------------------------%
110+
%---------------------------------------------------------------------%
124111

125-
%-area fill-%
126-
obj.data{areaIndex}.fill = 'tonexty';
112+
%-area fill-%
113+
if ~isempty(prevAreaIndex)
114+
obj.data{areaIndex}.fill = "tonexty";
115+
else % first area plot
116+
obj.data{areaIndex}.fill = "tozeroy";
117+
end
127118

128-
%-------------------------------------------------------------------------%
119+
%---------------------------------------------------------------------%
129120

130-
%-AREA MODE-%
131-
obj.data{areaIndex}.mode = 'lines';
121+
%-AREA MODE-%
122+
if isprop(area_data, "LineStyle") ...
123+
&& isequal(area_data.LineStyle, "none")
124+
obj.data{areaIndex}.mode = "none";
125+
else
126+
obj.data{areaIndex}.mode = "lines";
127+
end
132128

133-
%-------------------------------------------------------------------------%
129+
%---------------------------------------------------------------------%
134130

135-
%-area line-%
136-
obj.data{areaIndex}.line = extractAreaLine(area_data);
131+
%-area line-%
132+
obj.data{areaIndex}.line = extractAreaLine(area_data);
137133

138-
%-------------------------------------------------------------------------%
134+
%---------------------------------------------------------------------%
139135

140-
%-area fillcolor-%
141-
fill = extractAreaFace(area_data);
142-
obj.data{areaIndex}.fillcolor = fill.color;
136+
%-area fillcolor-%
137+
fill = extractAreaFace(area_data);
138+
obj.data{areaIndex}.fillcolor = fill.color;
143139

144-
%-------------------------------------------------------------------------%
140+
%---------------------------------------------------------------------%
145141

146-
%-area showlegend-%
147-
leg = area_data.Annotation;
148-
legInfo = leg.LegendInformation;
142+
%-area showlegend-%
143+
leg = area_data.Annotation;
144+
legInfo = leg.LegendInformation;
149145

150-
switch legInfo.IconDisplayStyle
151-
case 'on'
152-
showleg = true;
153-
case 'off'
154-
showleg = false;
155-
end
156-
157-
obj.data{areaIndex}.showlegend = showleg;
158-
159-
%-------------------------------------------------------------------------%
146+
switch legInfo.IconDisplayStyle
147+
case "on"
148+
showleg = true;
149+
case "off"
150+
showleg = false;
151+
end
160152

153+
obj.data{areaIndex}.showlegend = showleg;
161154
end
162-
163-

0 commit comments

Comments
 (0)