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

1 次查看(过去 30 天)
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?

采纳的回答

Art Kotz
Art Kotz 2015-6-11
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.

更多回答(1 个)

Art Kotz
Art Kotz 2015-6-16
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);

类别

Help CenterFile Exchange 中查找有关 Two y-axis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by