Two y axis with the same x-axis [duplicate]

╄→尐↘猪︶ㄣ 提交于 2019-12-03 13:04:06

问题


Possible Duplicate:
Plotting 4 curves in a single plot, with 3 y-axes

assuming I have the following dataset as an example here in Matlab:

x = linspace(0, 9, 10);
y1=arrayfun(@(x) x^2,x);
y2=arrayfun(@(x) 2*x^2,x);
y3=arrayfun(@(x) x^4,x);

thus you can see they have the SAME x-axis. Now I want the following plot:

one x-axis with the limits 0 to 9 (those limits should also be ticks) with N ticks (I want to be able to define N myself), thus having N-2 ticks inbetween because 0 and 9 itself are already ticks. I want y1 and y2 to refer to the same y-axis, which is being displayed on the left with ticks for 0 and max([y1, y2]) and M more ticks inbetween. than I want to have another axis on the right, where y3 refers to...

y1, y2 and y3 should have entries in the same legend box... thanks so far!

edit: argh just found this: Plotting 4 curves in a single plot, with 3 y-axes perhaps I can bould it up myself... I will try just right now!

EDIT: What when using logarithmic x-axis?!


回答1:


See this documentation on Using Multiple X- and Y-Axes. Something like this should do the trick:

figure
ax1 = gca;
hold on
plot(x,y1)
plot(x,y2)
ax2 = axes('Position',get(ax1,'Position'),...
       'XAxisLocation','top',...
       'YAxisLocation','right',...
       'Color','none',...
       'XColor','k','YColor','k');
linkaxes([ax1 ax2],'x');
hold on
plot(x,y3,'Parent',ax2);

Edit: whoops, missed a hold command. Should work now. Also, to remove the second x-axis on top, simply add 'XTickLabel',[] to the axes command.

As an aside, you really shouldn't use arrayfun for y1=arrayfun(@(x) x^2,x);. Instead, use the .^ operator: y1=x.^2;. It's much better style and is much quicker.



来源:https://stackoverflow.com/questions/6573862/two-y-axis-with-the-same-x-axis

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!