Problem with 2014b for replotting with multiple legends in plotyy chart

1 view (last 30 days)
I am trying to update a chart created with plotyy that uses two legend boxes for the two y-axes. I can create the chart, but when I replot the chart (normally with new data or with a different number of traces), I get the following error:
Error using legend (line 120)
'LayoutManager' is already defined as a property.
This code replicates the error (note: this worked fine in 2013a, but fails in 2014b)
% setup and initial chart
x = 1:10;
y1 = [1:10;0:9];
y2 = [20:-2:2];
figure;
[AX, H1, H2] = plotyy(x,y1,x,y2);
legend(AX(1), 'y1', 'Location', 'NorthWest');
legend(AX(2), 'y2', 'Location', 'NorthEast');
% replot using the same commands - this first part works as expected
[AX, H1, H2] = plotyy(x,y1,x,y2);
legend(AX(1), 'y1', 'Location', 'NorthWest');
% This last line fails with the error noted above
legend(AX(2), 'y2', 'Location', 'NorthEast');
Any thoughts?
  1 Comment
Art Kotz
Art Kotz on 10 Jun 2015
Still no answers ... Is there a better way to put two legends for different axes on a chart as described above?

Sign in to comment.

Accepted Answer

Art Kotz
Art Kotz on 11 Jun 2015
I submitted the problem to the support group at The Mathworks and got a response that works. If I use "clf" (clear figure) before the second call to plotyy, the replot works fine. This serves my needs and will let me deploy some programs under 2014b.
In the response, I was told that the problem has been fixed in the 2015b prerelease, so hopefully this will not be an issue when the full release comes out.

More Answers (1)

Art Kotz
Art Kotz on 16 Jun 2015
Update: The previous answer works for the problem statement I submitted. However, in a GUIDE application, you can't clear the bounding figure without crashing your application. In addition, if you have more than one axes object in your application, using clf on one of the axes causes an immediate crash of Matlab (not just the application, but the Matlab session itself).
A workaround proposed by Ryan Povall (thanks!) is to delete the axes object and recreate it. The following sequence of statements does this while preserving the position of the axes object. Hopefully it will be unnecessary in 2015b, but in the meantime this gets the job done for my applications ...
sUnits = get(handles.MyChart, 'Units');
pos = get(handles.MyChart, 'Position');
delete(handles.MyChart);
handles.MyChart = axes('Units', sUnits, 'Position', pos);

Categories

Find more on Two y-axis in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!