声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: bill0301

[绘图技巧] 请教高手如何绘制多y 轴的曲线图啊

[复制链接]
发表于 2006-9-3 22:47 | 显示全部楼层

回复 #16 bill0301 的帖子

大牛厉害!!
不过还有个问题,在这个程序中能显示鼠标所在位置的坐标,但是不能用鼠标取点,即鼠标单击后不能固定显示该点的坐标。这个问题该怎么解决呢?谢谢!!
回复 支持 反对
分享到:

使用道具 举报

发表于 2008-12-14 10:43 | 显示全部楼层
如果是只有一条曲线,但是想用两个或者两个以上的纵坐标,那该怎么办了呢。
temp=[25.21,25.46,25.51,25.65,25.92,26.07,25.84,25.46,24.84,23.84...
         22.95,21.24,18.91,16.7,14.62,13.58,12.24,10.03,6.235,6.117...
       4.227,3.146,1.888,0.7581,-1.144,-3.72,-5.672,-7.739,-9.518,-11.34...
      -13.46,-15.28,-17.02,-17.75,-18.29,-18.44,-17.96];
比如上面的数据,第一个纵坐标是纬度,北半球0-90度。第二个纵坐标是纬度的正弦值,范围是0-1。
请教各位高手了。

[ 本帖最后由 ChaChing 于 2009-11-29 00:48 编辑 ]
发表于 2008-12-14 10:54 | 显示全部楼层

回复 25楼 lyknq 的帖子

一条曲线,用多纵坐标有什么意义
发表于 2010-8-10 14:51 | 显示全部楼层

回复 17楼 lyknq 的帖子

发表于 2010-8-11 17:10 | 显示全部楼层
可以试一下一个叫floataxis 的小函数 其中有floataxisx,也有floataxisy
能够设置多个x坐标,或多个y坐标
发表于 2010-8-12 00:42 | 显示全部楼层
发表于 2010-8-12 11:10 | 显示全部楼层
昨天没时间,今天仔细说
利用floataxis这个函数,可以不限量的绘制多个x轴或y轴,x轴在下面,y轴在左侧
LS的LS的LS要求的大约是这个效果
clear;clc;clf
temp = [25.21,25.46,25.51,25.65,25.92,26.07,25.84,25.46,24.84,23.84...
         22.95,21.24,18.91,16.7,14.62,13.58,12.24,10.03,6.235,6.117...
       4.227,3.146,1.888,0.7581,-1.144,-3.72,-5.672,-7.739,-9.518,-11.34...
      -13.46,-15.28,-17.02,-17.75,-18.29,-18.44,-17.96];
lat = linspace(0,90,37);
lat_s = sin(lat*pi/180);

hl1 = plot(temp,lat,'k');
xlabel('temp')
ylabel('latitude / theta')
[hl2,ax2,ax3] = floatAxisY(temp,lat_s,'r-','sin theta');


把上传的m函数文件放到当前文件夹下即可
这个函数包的下载地址是
http://www2.mar.dfo-mpo.gc.ca/science/ocean/epsonde/programming.html
函数的作用是在当前图像axis上,再绘制图像,并且添加浮动坐标轴
调用方式如下(以浮动y轴为例):

[hl1,ax2,ax3] = floatAxisY(varargin)

hl1: line 的句柄
ax2: line所在axis的句柄,即图像所在坐标轴的句柄
ax3: 浮动x轴的句柄
这个函数事实上是绘制了两幅图,
把线画在上面的大图中,在图左侧又绘制一个y轴,作为该line的y轴

varagin:variable argument input 输入变量
nargin=2  
输入 x,y值  
如:[hl1,ax2,ax3]=floatAxisY(x, y)

nargin=3
输入变量 x,y,并且定义曲线,默认为‘k-’,黑实线
例如: [hl1,ax2,ax3]=floatAxisY(x, y,'r-')

nargin=4
定义浮动轴的label,‘string’
[hl1,ax2,ax3]=floatAxisY(x, y,'r-','Ylabel')

nargin=5
定义x,y范围, [xmin,xmax,ymin,ymax]
[hl1,ax2,ax3]=floatAxisY(x,  y, 'r-', 'Ylabel', [xmin,xmax,ymin,ymax])

这次应该说明白了吧:@)

[ 本帖最后由 curb 于 2010-8-12 11:55 编辑 ]
floataxisy.jpg

floatAxisY.m

4.29 KB, 下载次数: 6

评分

1

查看全部评分

发表于 2010-8-12 11:57 | 显示全部楼层
恩,忽然意识到,17楼要求的并非两条曲线,而是保持一条曲线,将浮动的y轴坐标不均匀,保持与lat的一致?
要再考虑一下了....
发表于 2010-8-12 12:03 | 显示全部楼层
楼主要求的
clear;clc;clf
x = [0 0.1 0.2 0.3 0.4 0.426 0.5 0.6 0.688 0.7 0.8 0.9 1.0];
y = [268.95 272.36 275.07 277.07 277.93 278 276.5 267.16 248.2 244.3 200.37 137.71 58.7];
a = [0 0.225 0.408 0.566 0.693 0.718 0.776 0.82 0.831 0.831 0.818 0.784 0.6];
k = [2.55 2.254 2.063 1.886 1.733 1.687 1.552 1.368 1.207 1.187 1.023 0.873 0.6];

h1 = plot(x,y,'k');
xlabel('x')
ylabel('y')
[h2,ax2a, ax2b] = floatAxisY(x,a,'r','a');
[h3,ax3a, ax3b] = floatAxisY(x,k,'b','k');
legend([h1,h2,h3],'y','a','k')


17楼的我再改改

[ 本帖最后由 curb 于 2010-8-12 12:30 编辑 ]
xyak.jpg
xyak.jpg
发表于 2010-8-12 12:45 | 显示全部楼层
17楼的图是不是这样?
clear;clc;clf
temp = [25.21,25.46,25.51,25.65,25.92,26.07,25.84,25.46,24.84,23.84...
         22.95,21.24,18.91,16.7,14.62,13.58,12.24,10.03,6.235,6.117...
       4.227,3.146,1.888,0.7581,-1.144,-3.72,-5.672,-7.739,-9.518,-11.34...
      -13.46,-15.28,-17.02,-17.75,-18.29,-18.44,-17.96];
lat = linspace(0,90,37);
lat_s = sin(lat*pi/180);

hl1 = plot(temp,lat,'k');
xlabel('temp')
ylabel('latitude / theta')
[hl2,ax2,ax3] = floatAxisY(temp,lat,'k-','sin theta');
set(ax3,'Ytick',0:10:90,...
        'YTickLabel',sprintf('%5.3f|\n',sin((0:10:90)*pi/180)))
floataxisy for 17L.jpg

评分

1

查看全部评分

发表于 2011-3-6 21:43 | 显示全部楼层
# [ax,hlines] = plotyyy(x,y,x,a,x,k,ylabels);
# legend(hlines, 'y = x','a =x','k = x',2)

这俩句话是不是又错误呢?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-14 15:10 , Processed in 0.075949 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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