用matlab将三条曲线放在一张双坐标的图上
x1=[0.4 0.5 0.59 0.6 0.7 0.8 0.9 0.99 1.11 1.12 1.31 1.4];
y1=[15.92 17.75 19.79 22.71 23.68 27.76 30.09 34.15 34.74 37.84 40 42.3];
a1=polyfit(x1,y1,1);
x11=[0:0.001;1.5];%x11=0:0.001;1.5错了??
y11=polyval(a1,x11);
x2=0.04:0.04:0.44;
y2=[4.95 13.66 21.87 25.68 30.52 33.58 37.19 40.43 42.91 49.30 50.12];
x22=[0;0.001;1.5];
a2=polyfit(x2,y2,1);
y22=polyval(a2,x22);
%x1-y1表示拟合前的点 x11-y11表示拟合后的直线 用左边和下方的坐标轴,
%x轴单位为F/N,y轴单位为V/ m/s
%x2-y2表示拟合前的点 x22-y22表示拟合后的直线 用左边和下方的坐标轴,
%x轴单位为F/N,y轴单位为V/ m/s
x3=[14421 13581 12742 11905 11047 10188 9340 9037 7632 6818 5986];
y3=[5.03 4.74 4.43 4.13 3.84 3.52 3.24 2.92 2.62 2.34 2.05];
x33=0:10:15000;
a3=polyfit(x3,y3,2);
y33=polyval(a3,x33);
%x3-y3表示拟合前的点 x33-y33表示拟合后的直线 用右边和上方的坐标轴,
%x轴单位为w/ 度/s,y轴单位为V / m/s
所以实际上,图上可以说是有六条线,但只需要三个图例来表示拟合直线(曲线),应该是用plotyy韩式表示吧??
顺便问一下,处理复杂的数据并制图用matlab好,还是excel,或者什么其他的软件,感觉matlab也是很麻烦的。。。
不止与100分 展开
plotyy函数只是有两个不同的纵轴,而横轴是一致的。
题主的要求是希望横轴、纵轴都不同,这应该没有现成的函数可用,只能是自己参照plotyy函数的思路来写代码。
由于不需要考虑两个坐标轴的范围及网格对齐问题,其实代码并不难写,比plotyy函数本身要简单很多。
基本思想是,用两个位置完全相同的坐标系叠加,其中第二个坐标系的颜色设为'none'(无填充色),并设置XAxisLocation、YAxisLocation分别为right和top。
参考代码(在题主贴出的代码之后):
co = get(gcf,'defaultaxescolororder');
ax(1) = newplot;
set(gcf,'nextplot','add')
h1=plot(x1,y1,'o',x11,y11,'-','color',co(1,:));
hold on
h2=plot(x2,y2,'x',x22,y22,':','color',co(1,:));
set(ax(1),'box','off')
set(ax(1),'xcolor',co(1,:),'ycolor',co(1,:))
xlabel('F/N')
ylabel('V/ m/s')
% Plot second plot
ax(2) = axes('position',get(ax(1),'position'));
h3=plot(x3,y3,'s',x33,y33,'color',co(2,:))
set(ax(2),'XAxisLocation','top','YAxisLocation','right', ...
'xgrid','on','ygrid','on','box','off','color','none');
set(ax(2),'xcolor',co(2,:),'ycolor',co(2,:))
xlabel('w/ 度/s')
ylabel('V / m/s')
legend([h1(2) h2(2) h3(2)],'x11-y11','x22-y22','x33-y33',2)
需要注意的是,由于需要把曲线的颜色设为和坐标轴颜色一致(以区分哪条曲线和哪个坐标系对应),曲线的区分可以使用线型(LineStyle)、标记(Marker)和线宽(LineWidth),但不宜使用不同颜色(Color)。
最后,关于处理复杂的数据并制图用matlab好,还是excel好的问题,其实是见仁见智的。每个软件都会有自己的优势,关键看使用者的熟悉程度和偏好。就我个人的体会来说,MATLAB总体上更强大,数据处理和绘图可以通过编程实现,相对而言自动化程度更高一些,但要想深入掌握也是需要花费不少时间的;Excel界面更友好,交互性更强,对于绘制的图形可以通过交互的方式做各种修饰,而如果希望实现自动化,也在一定程度上可以利用VBA完成。总之,可以根据要解决的问题和自己的知识结构,选择适当的工具。