plotyy with axis for each plot only on one side

8 次查看(过去 30 天)
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 个评论
the cyclist
the cyclist 2012-2-11
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

请先登录,再进行评论。

采纳的回答

the cyclist
the cyclist 2012-2-11
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 个评论
Matthias Pospiech
Matthias Pospiech 2012-2-13
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 2012-2-14
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.

请先登录,再进行评论。

更多回答(0 个)

类别

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