1. plot指令
plot 是最基本的绘图指令,属于SCILAB的内部函数,基本格式是:
(1) plot(y)
若Y为向量,则以Y元素值为纵坐标,以相应元素下标为横坐标值绘制连线图;若Y为实数矩阵,则按行绘制每行元素值并对应列下标的连线图,图中的曲线数等于Y阵的行数。
(2) plot(x,y,[xcap,ycap,caption])
若X、Y为向量,则其中Y是X的函数;在X没有给定的情况下,用向量(1,size(y,'*'))代替横坐标值;若X,Y是同维矩阵则以X,Y对应行元素为横坐标分别绘制曲线,曲线条数等于矩阵的列数。xcap,ycap,caption分别代表图形的X坐标标记、Y坐标标记和图形标题,均属于字符串类型。
例:x=0:0.1:2*%pi;
plot(x,sin(x),"x","y","y=sinx")
2. plot2di指令
这是较常用的二维绘图指令,它可以自行定义绘图方式。
Plot2d: 用分段连线绘图;
Plot2d2: 用分段常量方式绘图;
Plot2d3:绘制柱形图;
Plot2d4: 用箭头绘图;
具体用plot2di绘图指令的基本格式是:
(1)plot2di([x],y)
x和y可以是两个数量矩阵或向量。x和y必须相匹配,y的每列根据相关的x绘制。此指令允许同时绘制多条曲线。
例:x=[0:0.1:2*%pi]';
plot2d(x,[sin(x) sin(2*x) ])
(2) plot2di([x],y,)
x和y意义同(1),表示参数序列,可以是下列参数的一个或几个:
Style: 设置曲线线型颜色。第i条曲线由style(i )定义,缺省值为1。如果style(i)为负值或0,对应曲线用相应的style(i)的绝对值的标识方式绘图,标识可用xset()设置。 如果 style(i) 是正值, 用相对应的颜色绘制曲线,使用xset()查看颜色表及相应整数代表的颜色类型。如果画多条曲线,style可以是二维行向量[sty,pos],其中sty代表被标记的曲线的颜色类型,pos为一个1~6的整数,代表被标记的曲线的位置,这一语句在绘制多条曲线时非常方便。
Leg: 设置曲线的标题,为字符串。当标注多条曲线时,用leg= "leg1
@leg2@...."标注,leg1为第一条曲线标注,leg2为第二条曲线标注......,缺省值为空。
Rect: 设置轴的绘图范围。可以按照绘图需要设置x轴和y轴的范围。具体设置为: Rect=[xmin,ymin,xmax,ymax].其中xmin,xmax,ymin,ymax分别为x轴y轴的最大最小值。
Nax :设置坐标轴的刻度。当strf中的第三个字符z为1时才用到这个参数值,它是一个有四个分量的行向量[nx,ny,NX,Ny],这里nx (ny) 是指x (y)轴上的最小刻度数,Nx (Ny) 指x (y)轴上的最大刻度数。
Logflag: 设置坐标轴的刻度类型(对数或线性类型)。”n”,”l”分别代表用线性型和对数型绘制坐标轴,”ll”代表x轴和y轴的绘制均以对数为单位。缺省值为”nn”。
Frameflag : 指定计算绘图框架的方式。这个参数是一个范围为0~8的整数。
Axesflag : 指定绘图周围轴的类型。这个参数是一个范围为0~5的整数。
0: 不绘制坐标轴;
1: 坐标轴在左侧;
2: 图形绘制在矩形框中,并且不标记坐标;
3: 坐标轴在右侧;
4: 坐标轴在中间;
5: 坐标轴在中间并且交点为(0,0)。
注意:如果点(0,0)不在绘图范围内,坐标轴将不显示。
strf :形为“xyz”的字符串:
其中x为控制曲线的标题:若x=0,则无标题;若x=1,可自定义标题,标题由leg给出。y为控制画图的形式 ,类似于frameflag。z控制轴的绘制方式,类似于axesflag。
可以用strf可以代替前面的frameflag和axesglag指令,并且由x控制标题的输出与否,非常方便。
例:x=[-2*%pi:0.1:2*%pi]';
plot2d(x,sin(x) ,1,"165")
和 x=[-2*%pi:0.1:2*%pi]';
plot2d(x,sin(x),style=1,leg="x",frameflag=6,axesflag=5,rect=[-2*%pi,-1,2*%pi,1]) 绘出图形是一样的。
3. Subplot指令
subplot可以使多个图形以不同坐标系的形式在同一个图形窗口中绘出。
指令格式为:subplot(m,n,p) 或 subplot(mnp)
其中:m,n,p为正整数。m、n为把图形框分割为m*n阶矩阵,代表绘制横向m个、纵向n个图形,p代表第i个图形的绘制位置。
例:如下的程序段实现在同一个图形窗口中以不同坐标系的形式绘制两个图形
r=2
x1=2
y1=4
while %t then
xbasc()
xset("font size",5)
xtitle('力的合成和分解')
xset("font size",2)
x=r*x1
y=r*y1
axis_xmin=int(min(x1,x,0)-2)
axis_xmax=int(max(x1,x,0)+2)
axis_ymin=int(min(y1,y,0)-2)
axis_ymax=int(max(y1,y,0)+2)
xset("thickness",1)
subplot(121)
flag_show='a=(' + string(x1) + ','+ string(y1)+')'
plot2d4([[0 x1]]',[[0 y1]]',[2,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[0 x1]]',[[0 y1-2]]',[3,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[0 x1-2]]',[[0 y1-2]]',[3,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[0 x1]]',[[y1-2 y1]]',[4,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[x1 x1]]',[[y1-2 y1]]',[4,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
xset("line style",1)
drawaxis(x=axis_xmin:axis_xmax,y=0,dir='d',tics='v')
drawaxis(x=0,y=axis_ymin:axis_ymax,dir='l',tics='v')
Shuoming=[" 如果一个力作用在物体上,它产生的效果跟几个力共同作用的"; ..
" 效果相同,这个力就叫做那几个力的合力,求几个已知力的合";..
" 叫做力的合成";..
" 力的合成应用平行四边形法则";..
" 如图所释,蓝色线是绿色线分力的合力"]
xset("font size",2)
xstring(axis_xmax-5,axis_ymax-3,Shuoming,0,1)
xset("font size",1)
xstring(-0.5,2,'F1')
xstring(2.5,2,'F2')
xstring(2,4,'F 合')
subplot(122)
flag_show='ra=(' + string(x) + ','+ string(y)+')'
plot2d4([[0 x]]',[[0 y]]',[2,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[0 x+2]]',[[0 y-5]]',[3,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[0 x-6]]',[[0 y-3]]',[3,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[x+2 x]]',[[y-5 y]]',[4,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
plot2d4([[x-6 x]]',[[y-3 y]]',[4,3,1],"130",rect=[axis_xmin,axis_ymin,axis_xmax,axis_ymax],leg=flag_show)
xset("line style",1)
drawaxis(x=axis_xmin:axis_xmax,y=0,dir='d',tics='v')
drawaxis(x=0,y=axis_ymin:axis_ymax,dir='l',tics='v')
xstring(-2,5.5,'F1')
xstring(6,3,'F2')
xstring(4,8,'F 合')
[c_i,c_x,c_y]=xclick()
if c_i<>2 then //left button press
xbasc()
return
end
sig=x_mdialog('a=(x,y);请输入x、y和r',['x:';'y:';'r:'],[string(x1); string(y1); string(r)])
if sig<>[] then
x1=evstr(sig(1))
y1=evstr(sig(2))
r=evstr(sig(3))
end
end
为了使图形让读者看来简单易懂,我们还需要给图形加适当的解释和注解,并标出图形中的关键点,这就需要一些相关的SCILAB中string-图形中字符、xstringb-框内字符、xtitle-图形标题、plotframe-图形加框并画坐标网格线、isoview-等尺寸比例显示等语句,有时还需要在不显示坐标轴的情况下手动绘制坐标轴,因此还需要了解xpoly、 xaxis等画线语句。
下面简单介绍一下其中几种常用语句:
xtitle : 图形标题语句
指令格式为:xtitle(xtit,[xax,yax,encad])
xtit,xax,yax:字符串矩阵,由“ ”给出。xtit为整个图形主标题,xax为x轴标题,yax 为y轴标题。用分号“;”来实现标题的分行显示,“;”后的文字将另起一行。
encad:整型值。如果值为1,则给每个标题加框。
xstring : 图形中标注字符语句
指令格式为:xstring(x,y,str,[angle,box])
x,y: 实数标量,用于标注字符串的位置,相当于直角坐标系下的坐标
str: 字符串,由“”给出。若想使字符不在同一行显示,则在字符间插入“;”。
angle:实数,代表输出字符的顺时针旋转的角度,缺省值为0。
box: 实数,缺省值为0。如果值为1,则在输出字符周围加框。
xstringb : 框内标注字符语句
该语句的使用类似于xstring语句,但比xstring语句更为简单。
指令格式为:xstringb(x,y,str,w,h,[option])
x,y,w,h:为四个实数,分别代表矩形框的横坐标位置、纵坐标位置、宽和高,字符将在这一矩形框内输出。
Scilab中部分图形函数介绍
2005-06-27 09:06 星期一