声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2163|回复: 5

[绘图技巧] 再问多纵坐标图像画法?

[复制链接]
发表于 2006-11-25 19:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
看了http://forum.vibunion.com/thread-24244-1-1.html这个帖子的做法,想问个变化点的问题,自己试了几次没成功。
          已经用plotyyy画出了三个函数图象。但我的三个函数都是拟合出来的。我想在图上再把拟合前的基本实验点用‘*'标出来,该怎么用?
        由于在原帖子里回复人气不足,所以再发新帖
回复
分享到:

使用道具 举报

发表于 2006-11-27 11:59 | 显示全部楼层
简单修改一下就行了

  1. function [ax,hlines] = plotyyy(x1,y1,x2,y2,x3,y3,ylabels)
  2. %PLOTYYY - Extends plotyy to include a third y-axis
  3. %Syntax:  [ax,hlines] = plotyyy(x1,y1,x2,y2,x3,y3,ylabels)
  4. %Inputs: x1,y1 are the xdata and ydata for the first axes' line
  5. %        x2,y2 are the xdata and ydata for the second axes' line
  6. %        x3,y3 are the xdata and ydata for the third axes' line
  7. %        ylabels is a 3x1 cell array containing the ylabel strings
  8. %Outputs: ax -     3x1 double array containing the axes' handles
  9. %         hlines - 3x1 double array containing the lines' handles
  10. %Author: Denis Gilbert, Ph.D., physical oceanography
  11. %Maurice Lamontagne Institute
  12. %Dept. of Fisheries and Oceans Canada
  13. %email: gilbertd@dfo-mpo.gc.ca  
  14. %Web: http://www.qc.dfo-mpo.gc.ca/iml/
  15. %April 2000; Last revision: 14-Nov-2001
  16. if nargin==6
  17.    ylabels{1}=' '; ylabels{2}=' '; ylabels{3}=' ';
  18. elseif nargin > 7
  19.    error('Too many input arguments')
  20. elseif nargin < 6
  21.    error('Not enough input arguments')
  22. end
  23. figure('units','normalized',...
  24.        'DefaultAxesXMinorTick','on','DefaultAxesYminorTick','on');
  25. [ax,hlines(1),hlines(2)] = plotyy(x1,y1,x2,y2);
  26. cfig = get(gcf,'color');
  27. pos = [0.1  0.1  0.7  0.8];
  28. offset = pos(3)/5.5;
  29. pos(3) = pos(3) - offset/2;
  30. set(ax,'position',pos);  
  31. pos3=[pos(1) pos(2) pos(3)+offset pos(4)];
  32. limx1=get(ax(1),'xlim');
  33. limx3=[limx1(1)   limx1(1) + 1.2*(limx1(2)-limx1(1))];
  34. ax(3)=axes('Position',pos3,'box','off',...
  35.    'Color','none','XColor','k','YColor','r',...   
  36.    'xtick',[],'xlim',limx3,'yaxislocation','right');
  37. hlines(3) = line(x3,y3,'Color','r','Parent',ax(3));
  38. limy3=get(ax(3),'YLim');
  39. line([limx1(2) limx3(2)],[limy3(1) limy3(1)],...
  40.    'Color',cfig,'Parent',ax(3),'Clipping','off');
  41. axes(ax(2))
  42. set(hlines(1),'marker','*');
  43. set(hlines(2),'marker','*');
  44. set(hlines(3),'marker','*');
  45. set(get(ax(1),'ylabel'),'string',ylabels{1})
  46. set(get(ax(2),'ylabel'),'string',ylabels{2})
  47. set(get(ax(3),'ylabel'),'string',ylabels{3})
复制代码
 楼主| 发表于 2006-11-27 12:54 | 显示全部楼层
我想标出的是原来较少的那几个基本数据点。

能帮我看下我的程序吗

clear
a=0.411;
n=0.492;
c=20;
R=[0,0.9,3.0,6.4,10.9,19.4,29.7,39.2,50.3];                  %差压计读数
H1=[0.84,0.82,0.80,0.78,0.73,0.63,0.51,0.40,0.29];           %压力表读数
H2=[0.000,0.000,0.001,0.0025,0.004,0.005,0.008,0.010,0.012]; %真空表读数
N1=[23,24.5,26.3,28.1,30.0,32.1,33.9,34.9,35.9];             %功率表格数
K=[0.174,0.210,0.270,0.278,0.310,0.338,0.364,0.372,0.379];   %电机效率
Q=a*(R.^n),                                                                                              %计算并输出流量l/s  
U1=(4*1000*Q)/(pi*39^2),                              
U2=(4*1000*Q)/(pi*31^2),                                                           %计算并输出进出口流速m/s
H=0.1+1000*H2/9.8+H1/10+(U2.^2-U1.^2)/(2*9.8);
H                                                               %计算并输出扬程
N=N1.*K*c,                                                             %轴功率w
M=(H.*Q*9.8)./N,                                                             %离心泵效率
p1=polyfit(Q,H,4),
p2=polyfit(Q,N,4),
p3=polyfit(Q,M,4),                                                   %分别拟合扬程,轴功,效率关于流量的关系
x=0:.01:4;
y1=polyval(p1,x);
y2=polyval(p2,x);
y3=polyval(p3,x);
ylabels{1}='扬程/m';
ylabels{2}='轴功率/w';
ylabels{3}='离心泵效率/%';
[ax,hlines] = plotyyy(x,y1,x,y2,x,y3,ylabels);
legend(hlines, 'H','N','效率',2)
grid  on


我的意思是想把(Q,H) (Q,N) (Q,M)用‘’*'标出来,如果改成上面的,岂不是把x=0:.01:4每个点都标记了?
发表于 2006-11-27 20:57 | 显示全部楼层
  1. clear
  2. a=0.411;
  3. n=0.492;
  4. c=20;
  5. R=[0,0.9,3.0,6.4,10.9,19.4,29.7,39.2,50.3];                  %差压计读数
  6. H1=[0.84,0.82,0.80,0.78,0.73,0.63,0.51,0.40,0.29];           %压力表读数
  7. H2=[0.000,0.000,0.001,0.0025,0.004,0.005,0.008,0.010,0.012]; %真空表读数
  8. N1=[23,24.5,26.3,28.1,30.0,32.1,33.9,34.9,35.9];             %功率表格数
  9. K=[0.174,0.210,0.270,0.278,0.310,0.338,0.364,0.372,0.379];   %电机效率
  10. Q=a*(R.^n),                                                                                              %计算并输出流量l/s  
  11. U1=(4*1000*Q)/(pi*39^2),                              
  12. U2=(4*1000*Q)/(pi*31^2),                                                           %计算并输出进出口流速m/s
  13. H=0.1+1000*H2/9.8+H1/10+(U2.^2-U1.^2)/(2*9.8);
  14. H                                                               %计算并输出扬程
  15. N=N1.*K*c,                                                             %轴功率w
  16. M=(H.*Q*9.8)./N,                                                             %离心泵效率
  17. p1=polyfit(Q,H,4),
  18. p2=polyfit(Q,N,4),
  19. p3=polyfit(Q,M,4),                                                   %分别拟合扬程,轴功,效率关于流量的关系
  20. x=0:.01:4;
  21. y1=polyval(p1,x);
  22. y2=polyval(p2,x);
  23. y3=polyval(p3,x);
  24. ylabels{1}='扬程/m';
  25. ylabels{2}='轴功率/w';
  26. ylabels{3}='离心泵效率/%';

  27. figure('units','normalized',...
  28.        'DefaultAxesXMinorTick','on','DefaultAxesYminorTick','on');
  29. [ax,hlines(1),hlines(2)] = plotyy(x,y1,x,y2);
  30. cfig = get(gcf,'color');
  31. pos = [0.1  0.1  0.7  0.8];
  32. offset = pos(3)/5.5;
  33. pos(3) = pos(3) - offset/2;
  34. set(ax,'position',pos);  
  35. pos3=[pos(1) pos(2) pos(3)+offset pos(4)];
  36. limx1=get(ax(1),'xlim');
  37. limx3=[limx1(1)   limx1(1) + 1.2*(limx1(2)-limx1(1))];

  38. hold on;
  39. [ax2,hlines2(1),hlines2(2)] = plotyy(Q,H,Q,N);
  40. set(hlines2(1),'linestyle','none','marker','*');
  41. set(hlines2(2),'linestyle','none','marker','*');

  42. ax(3)=axes('Position',pos3,'box','off',...
  43.    'Color','none','XColor','k','YColor','r',...   
  44.    'xtick',[],'xlim',limx3,'yaxislocation','right');
  45. hlines(3) = line(x,y3,'Color','r','Parent',ax(3));
  46. limy3=get(ax(3),'YLim');
  47. line([limx1(2) limx3(2)],[limy3(1) limy3(1)],...
  48.    'Color',cfig,'Parent',ax(3),'Clipping','off');

  49. hlines(3) = line(x,y3,'Color','r','Parent',ax(3));
  50. hlines2(3) = line(Q,M,'Color','r','Parent',ax(3));
  51. set(hlines2(3),'linestyle','none','marker','*');
  52. axes(ax(2))
  53. set(get(ax(1),'ylabel'),'string',ylabels{1})
  54. set(get(ax(2),'ylabel'),'string',ylabels{2})
  55. set(get(ax(3),'ylabel'),'string',ylabels{3})
复制代码

评分

1

查看全部评分

 楼主| 发表于 2006-11-27 22:10 | 显示全部楼层
谢谢happy教授,受益匪浅!!!!
发表于 2006-11-27 22:19 | 显示全部楼层
我也有同样的问题,谢谢happy教授!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-30 10:09 , Processed in 0.072908 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表