matlab中如何设置y轴位置,使y轴在x轴的中间,我做的图y轴在X轴的一边了

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab中如何设置y轴位置,使y轴在x轴的中间,我做的图y轴在X轴的一边了相关的知识,希望对你有一定的参考价值。

如图,我想把y轴移到X=0的位置,该怎样做?

虽然有点麻烦,但是还是可以实现的。

xyplot.m内容如下:

function xyplot(x,y)

% PLOT

if nargin>0

    if nargin == 2

        plot(x,y);

    else

        display('   Not 2D Data set !')

    end

end

hold on;

% GET TICKS

X=get(gca,'Xtick');

Y=get(gca,'Ytick');

% GET LABELS

XL=get(gca,'XtickLabel');

YL=get(gca,'YtickLabel');

% GET OFFSETS

Xoff=diff(get(gca,'XLim'))./40;

Yoff=diff(get(gca,'YLim'))./40;

% DRAW AXIS LINEs

plot(get(gca,'XLim'),[0 0],'k');

plot([0 0],get(gca,'YLim'),'k');

% Plot new ticks

for i=1:length(X)

    plot([X(i) X(i)],[0 Yoff],'-k');

end;

for i=1:length(Y)

    plot([Xoff, 0],[Y(i) Y(i)],'-k');

end;

% ADD LABELS

text(X,zeros(size(X))-2.*Yoff,XL);

text(zeros(size(Y))-3.*Xoff,Y,YL);

box off;

% axis square;

axis off;

set(gcf,'color','w');

%%%%%%%%%%%

验证程序如下:

%%%%%%%%%

t = linspace(0,2*pi,500); 

  y1 = 80*sin(t); 

  y2 = 100*cos(t);

  xyplot(t,[y1;y2])

  x = -2*pi:pi/10:2*pi;

  y = sin(x);

  plot(x,y)

  xyplot

如下图所示:

追问

我不是很懂,请问我这个需要怎么改才能把Y轴调到X轴中间?
x=-3:0.5:3;
y3n=zeros(length(x));
y3p=zeros(length(x));
y3w=zeros(length(x));
y3n=4.779+0.183*x-0.033*x.^2;
y3p=4.779+0.126*x+0.002*x.^2;
y3w=4.779+0.176*x+0.085*x.^2;
plot(x,y3n,':Ko');
hold on;
plot(x,y3p,':Kx');
hold on;
plot(x,y3w,':K.');
saveas(gcf,'7','fig');
saveas(gcf,'7','bmp');

追答

图片如下,看到后,百度hi我,我把程序给你。

参考技术A 虽然有点麻烦,但是还是可以实现的。
xyplot.m内容如下:
function xyplot(x,y)
% PLOT
if nargin>0
if nargin == 2
plot(x,y);
else
display(' Not 2D Data set !')
end
end
hold on;
% GET TICKS
X=get(gca,'Xtick');
Y=get(gca,'Ytick');
% GET LABELS
XL=get(gca,'XtickLabel');
YL=get(gca,'YtickLabel');
% GET OFFSETS
Xoff=diff(get(gca,'XLim'))./40;
Yoff=diff(get(gca,'YLim'))./40;
% DRAW AXIS LINEs
plot(get(gca,'XLim'),[0 0],'k');
plot([0 0],get(gca,'YLim'),'k');
% Plot new ticks
for i=1:length(X)
plot([X(i) X(i)],[0 Yoff],'-k');
end;
for i=1:length(Y)
plot([Xoff, 0],[Y(i) Y(i)],'-k');
end;
% ADD LABELS
text(X,zeros(size(X))-2.*Yoff,XL);
text(zeros(size(Y))-3.*Xoff,Y,YL);
box off;
% axis square;
axis off;
set(gcf,'color','w');
%%%%%%%%%%%
验证程序如下:
%%%%%%%%%
t = linspace(0,2*pi,500);
y1 = 80*sin(t);
y2 = 100*cos(t);
xyplot(t,[y1;y2])
x = -2*pi:pi/10:2*pi;
y = sin(x);
plot(x,y)
xyplot
参考技术B 可以用matlab提供的坐标轴设置函数axis进行设置(对当前坐标轴进行设置),具体用法如下:
plot(x, y); // 画图后用axis函数设置坐标轴的范围
axis([xmin xmax ymin ymax]); % 设置坐标轴在指定的区间
xmin、xmax 表示设置横坐标的最小最大值;
ymin、ymax 表示设置纵坐标的最小最大值。
也可以用下面的set函数进行设置(对指定的坐标轴进行设置),具体用法如下:
plot(x, y); // 画图后用set函数设置坐标轴的属性
set(handles,'xtick',0:100:2500) % handles可以指定具体坐标轴的句柄
功能: 设置X轴坐标范围0到2500,显示间隔是100;
set(handles,'ytick',0:100:2500) % handles可以指定具体坐标轴的句柄
参考技术C 先按照原本的图(就是坐标轴在底部)画出来,然后在出现的图形界面点edit-axes properties,最右下边有more properties,点开,下拉到XAxisLocation和YAxisLocation,默认是bottom和left,全都设为original就行了

Matlab中用plot画图,x轴和y轴比例不一致

两个问题:
1、Matlab中用plot画图时,x轴和y轴比例不一致,想把x轴和y轴比例调成一致,也就是让x轴和y轴上的同样0.5看起来距离也是一样的。
2、想把x轴和y轴的坐标线放在中间(0,0)的位置
目前的显示效果如下图所示:

目前使用的代码如下:
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4);
% 离散数据点
x=load('C:\Users\kkk\Desktop\Total.txt');
p0=[1 1 1 1];
warning off
% 拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
plot(x(:,1),x(:,2),'ro');
hold on;
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
title('曲线拟合');
legend('样本点','拟合曲线')

使用数据如下:
http://pan.baidu.com/s/1beuwvc

在线等,急!

figure axe1 = axes('position', [.13, .13, .74, .23]); axe2 = axes('position', [.13, .40, .74, .50]); set(gcf, 'position', [532 197 951 781]),首先,position的值是[左,底,宽, 高] ,这个一看就明白了,四点确定了一个图形的所有,但是这里一定要注意,gcf和axe的不同, axe的母句柄是figre,所以,axe的数字都是小于1的,这个数字的意义是在figure里面的比例,整个figure是1。但是,对于figure而言,不是这样的,因为经常会在x轴有日期啊各种,所以figure的大小很重要,这里的figure大小就是真实的大小,和屏幕分辨率有关,分辨率是多少,最大就是多少。具体操作如下:

1、打开软件

2、输入plot(x,y,x,g,)

3、输入legend(“sin(x)”,“cox(x)”)

4、得出

参考技术A

Matlab中用plot画图,x轴和y轴比例不一致是设置错误造成的,解决方法为:

1、首先来一列数据,如果是单独写在两个图形上。

2、如果要写在一个图形上,使用双坐标:x = 0:0.01:20;y1 = 200*exp(-0.05*x).*sin(x);y2 = 0.8*exp(-0.5*x).*sin(10*x);figure;plotyy(x,y1,x,y2)。

3、可以通过如下方式对不同的曲线进行赋值:figure;[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2);title('Multiple Decay Rates');xlabel('Time (\\musec)');ylabel(hAx(1),'Slow Decay') ;ylabel(hAx(2),'Fast Decay');hAx(1)和hAx(2)分别代表了第一个图形和第二个图形。

4、还可以使用不同的线型画不同的线:[hAx,hLine1,hLine2] = plotyy(x,y1,x,y2);hLine1.LineStyle = '--';hLine2.LineStyle = ':';可以看看第一条线和第二条线的区别。

5、当然两条线也可以用不同的方式进行绘制:x = 0:0.1:10;y1 = 200*exp(-0.05*x).*sin(x);y2 = 0.8*exp(-0.5*x).*sin(10*x);figure;plotyy(x,y1,x,y2,'plot','stem')第一条线是最普通的plot,第二条线是棒状图stem。

参考技术B

1、axis equal

2、这个功能matlab无法直接实现,除非是用最新的R2015b版本。因此,有人写了一个自定义函数 shift_axis_to_origin( ) 实现将坐标轴移到原点的效果。

function shift_axis_to_origin( fig_handle )
% 本函数目的是把 matlab 做的图坐标轴移到图形的中间部分去(与数学的做图习惯一致)
% 2008.10.10 in pku
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
xL=xlim ;
yL=ylim ;
xt=get(gca,'xtick') ;
yt=get(gca,'ytick') ;
set(gca,'XTick',[],'XColor','w') ;
set(gca,'YTick',[],'YColor','w') ;
% 把 x 和 y 坐标轴的两个方向各延长 10% (为了视觉上好看)
extend_x = ( xL(2)-xL(1) ) * 0.1 ;
extend_y = ( yL(2)-yL(1) ) * 0.1 ;
xxL = xL + [ -extend_x extend_x] ;
yyL = yL + [ -extend_y extend_y] ;
set(gca,'xlim', xxL) ;
set(gca,'ylim', yyL) ;
pos = get(gca,'Position') ;
% box off;
x_shift = abs( yyL(1)/(yyL(2)-yyL(1)) ) ;
y_shift = abs( xxL(1)/(xxL(2)-xxL(1)) ) ;
temp_1 = axes( 'Position', pos + [ 0 , pos(4) * x_shift , 0 , - pos(4)* x_shift*0.99999 ] ) ;
xlim(xxL) ;
% box off ;
set(temp_1,'XTick',xt,'Color','None','YTick',[]) ;
set(temp_1,'YColor','w') ;
temp_2 = axes( 'Position', pos + [ pos(3) * y_shift , 0 , -pos(3)* y_shift*0.99999 , 0 ] ) ;
ylim(yyL) ;
% box off ;
set(temp_2,'YTick',yt,'Color','None','XTick',[]) ;
set(temp_2,'XColor','w') ;
Base_pos = get(fig_handle,'Position') ;
arrow_pos_in_x_dircetion = Base_pos(2) - Base_pos(4) * yyL(1)/(yyL(2)-yyL(1)) ;
arrow_pos_in_y_dircetion = Base_pos(1) - Base_pos(3) * xxL(1)/(xxL(2)-xxL(1)) ;
annotation('arrow',[Base_pos(1) , Base_pos(1)+Base_pos(3)] , [arrow_pos_in_x_dircetion , arrow_pos_in_x_dircetion ] , 'Color','k');
annotation('arrow',[arrow_pos_in_y_dircetion , arrow_pos_in_y_dircetion ] , [Base_pos(2) , Base_pos(2)+Base_pos(4)] , 'Color','k');
end

将上面的函数保存在工作目录下,通过以下代码基本可以实现你的需求

% 原来的代码
F=@(p,x)p(1)*x(:,1).^2+p(2)*x(:,1).*x(:,2)+p(3)*x(:,2).^2+p(4);
% 离散数据点
x=load('C:\\Users\\kkk\\Desktop\\Total.txt');
p0=[1 1 1 1];
warning off
% 拟合系数,最小二乘方法
p=nlinfit(x,zeros(size(x,1),1),F,p0);
plot(x(:,1),x(:,2),'ro');
hold on;
xmin=min(x(:,1));
xmax=max(x(:,1));
ymin=min(x(:,2));
ymax=max(x(:,2));
% 作图
ezplot(@(x,y)F(p,[x,y]),[-1+xmin,1+xmax,-1+ymin,1+ymax]);
title('曲线拟合');
legend('样本点','拟合曲线')

% 新增代码
xlabel('')
ylabel('')
shift_axis_to_origin( gca ) ;
axis equal

最终效果

本回答被提问者采纳

以上是关于matlab中如何设置y轴位置,使y轴在x轴的中间,我做的图y轴在X轴的一边了的主要内容,如果未能解决你的问题,请参考以下文章

matlab画图 如何将两个共用x轴的图画在一幅图上 使上边为一个y轴,下边为不同的y轴?

MATLAB中如何画平行x轴或y的直线?

在用Matlab画图时,能不能改变原点的位置

MATLAB用作图之后如何把y轴的坐标值放到两个刻度之间?

hellocharts柱状图可以设置两个y值吗

Matlab中用plot画图,x轴和y轴比例不一致