plotyy with axis for each plot only on one side

7 Ansichten (letzte 30 Tage)
Matthias Pospiech
Matthias Pospiech am 11 Feb. 2012
Bearbeitet: Andrei Bobrov am 11 Okt. 2013
The following code shows my problem. plotyy completely fails if the ticks are not at the same positions on both sides (which is rather the normal case...)
I require a plot with two y axis but the ticks only on one side. I was suggested to use addaxis, but I do not see how that helps me, since I do not want separated axis.
clf;
clc;
xaxis = 0:0.1:25;
y1 = linspace(12.1712,12.7679, length(xaxis));
y2 = linspace(0.3597,-28.7745, length(xaxis));
[AX,H1,H2] = plotyy(xaxis, y1, xaxis, y2);
% axis limits - x axis (min to max)
xlimits(1) = min(xaxis); xlimits(2) = max(xaxis);
set(AX, 'XLim', xlimits);
set(AX(2),'XTick',[]);
% y1 axis limits
ylimits(1) = min(ydata1); ylimits(2) = max(ydata1);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
set(AX(1), 'YLim', ylimits);
% y2 axis limits
ylimits(1) = min(ydata2); ylimits(2) = max(ydata2);
ylimits(2) = ylimits(2) + (ylimits(2)-ylimits(1))*0.05;
set(AX(2), 'YLim', ylimits);
% y1 ticks
set(AX(1),'YTick',[12.0:0.1:12.8]);
% y2 ticks
set(AX(2),'YTick',[-25:5:0]);
print(gcf, ['-r' num2str(400)], ['test' '.png' ], ['-d' 'png']);
I would like to provide an example picture, but this forum does not allow to add images.
If this is not solvable with matlab, I will have to suggest the person which asked me if their data can be plotted with matlab to use something different.
  1 Kommentar
the cyclist
the cyclist am 11 Feb. 2012
It is a shame that we cannot upload an image directly here. Instead, you can upload an image to a free site and link here. Here are some suggestions: http://www.mathworks.com/matlabcentral/answers/7924-where-can-i-upload-images-and-files-for-use-on-matlab-answers

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

the cyclist
the cyclist am 11 Feb. 2012
The problem is that the tick marks of the left-hand axes (axis 1) are drawn on both the left and right edges of the plot. (Even when you use just the plot() function, the ticks marks appear on both the left- and right-hand side of the axis. )
Here is a work-around that might be acceptable.
figure
ax=plotyy(1:10,1:10,1:100,1:100);
set(ax(2),'YTick',[]) % Remove ticks of axis 2 (leaves right-hand ticks of axis 1)
set(ax(1),'Box','off') % Turn off box of axis 1, which removes its right-hand ticks
This code will remove the right-hand ticks of axis 1, but also right-hand and top edges of the box. I don't know of a better way.
However, you might also want to try this submission from the FEX: http://www.mathworks.com/matlabcentral/fileexchange/4936-plt which I understand has better control over some of these things. (I haven't used it myself.)
  2 Kommentare
Matthias Pospiech
Matthias Pospiech am 13 Feb. 2012
This works, but
set(ax(2),'YTick',[])
has not effect, and I do not see why it is necessary.
The best improvement would be if one could paint a line on top of the plot where it is missing now, or plot any empty plot frame on top. However I do not know how.
the cyclist
the cyclist am 14 Feb. 2012
That command does have an effect. If you run my code, but leave out that command, you will see the ticks of the right-hand axis.
You might be able to get the effect you want by just using the line() command to manually put in the axis lines. I'm not sure.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Two y-axis finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by