爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 19470|回复: 7

[程序设计] Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置,实用

[复制链接]

新浪微博达人勋

发表于 2013-9-9 10:31:49 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
Matlab图形窗口大小的控制 ,plot窗口大小,figure大小,axis设置,实用
heaventian
Matlab中保存图像时,图形窗口大小的控制zz
首先要了解的是Matlab是面向对象的。最高等级的对象是screen,它定义了figure可以用的最大szie。
screen下面是figure。figue就是你画图的时候跳出来的那个新的对话窗口。如果figure变化,screen是不会跟着变化的。但screen变化的话,figure就要跟着变化了。

figure下面是axes。axes是那个窗口里面你要画的东西。axes的大小和位置取决于figure,如果你放大缩小figure的大小的话,里面的图线也会跟着变化的。
set(gca,'position',[])
因此,set (gca,'position',[0.1,0.1,0.9,0.9] );的作用是:
设置坐标轴距离画板(图形窗口figure)边距。
[0.1,0.1,0.9,0.9] 分别为axes在figure中的左边界,下边界,宽度,高度,最小为0,最大为1(左边界,下边界为0,上边界,右边界为1)
见下面的例子:
-----------------------------------------------------------------------------
figure
set (gca,'position',[0.1,0.1,0.9,0.9] );
x=1:0.1:10;
y=sin(x);
plot(x,y)
-----------------------------------------------------------------------------
结果见下图:

set(gcf,'position',[])
一般matlab绘出来图的框架(图形窗口)大都是正方形或者近似正方形的矩形,能不能画一些扁的矩形呢?
使用图形的position属性可以做到。
如set(gcf,'unit','normalized','position',[0.2,0.2,0.64,0.32]);的意思是:
对gcf的position进行设置。使其在屏幕上的显示位置是以(0.2,0.2)为原点,长0.64,宽0.32。同gca一样,仍然是左边界,下边界为0,
上边界,右边界为1。
另外,gcf的position也可以不是normalized的。如下面的例子:
-----------------------------------------------------------------------------
x=-2*pi:0.1:2*9i;y=sin(x);figure;set (gcf,'Position',[500,500,500,500], 'color','w') %大小设置plot(x,y,'k-') %节点位移图形输出xlim([min(s(:,2)) max(s(:,2))])grid on
-----------------------------------------------------------------------------
其中,
[500,500,500,500]的意思为:原点的位置x,原点的位置y,宽,高,其坐标为points(详见下面),


现在问题还存在:
如果仅设置position的话,打印的时候还是正方形。可以用下面的方法解决:
通常默认情况下,print命令输出图像为 8*5inches,无视屏幕显示尺寸
通过命令行修改的话有三步
1 设置paperposition为manual
set(gcf,'PaperPositionMode', 'manual')
[ auto | {manual} ]
2 设置paperunit   
set(gcf,'PaperUnits','inches')
[ {inches} | centimeters | normalized | points ]
3 设置paperposition
set(gcf,'PaperPosition',[left,bottom,width,height])
例如
set(gcf, 'PaperPositionMode', 'manual');
set(gcf, 'PaperUnits', 'points');
set(gcf, 'PaperPosition', [0 0 640 480]);

还有一个相关命令是papersize
paperposition 是placement,代表图像在paper(感觉就是屏幕screen的意思?)中的所处位置。left和bottom计算好,就可以使图像在paper中居中
papersize是纸张大小;position要比size小的

PaperPosition
    four-element rect vector
    Location on printed page. A rectangle that determines the location of the figure on the printed page. Specify this rectangle with a vector of the form
     rect = [left, bottom, width, height]
    where left specifies the distance from the left side of the paper to the left side of the rectangle and bottom specifies the distance from the bottom of the page to the bottom of the rectangle. Together these distances define the lower-left corner of the rectangle. width and height define the dimensions of the rectangle. The PaperUnits property specifies the units used to define this rectangle.

要使图像比例输出与屏幕显示的一致,可以使用如下命令
屏幕显示图像尺寸可以plot时用 set(gcf,'position',[left bottom width height]) 调整,或者print之前拖动窗口手动调整
This example exports a figure at screen size to a 24-bit TIFF file, myfigure.tif.

% set(gcf,'position',[80 100 800 600])  % 如果手动拖放,则不需要这一行命令
set(gcf, 'PaperPositionMode', 'auto')   % Use screen size
print -dtiff myfigure


用matlab画了一张图,投稿时要缩小,缩小后字体就会过小或者发虚。我摸索出比较好的方法是如下的代码:%%%%%%%%%%%%%%%%%%%%%%plot your figure before%%%%%%%%%%%%%%%%%%%%%% figure resize
set(gcf,'Position',[100 100 260 220]);
set(gca,'Position',[.13 .17 .80 .74]);
figure_FontSize=8;
set(get(gca,'XLabel'),'FontSize',figure_FontSize,'Vertical','top');
set(get(gca,'YLabel'),'FontSize',figure_FontSize,'Vertical','middle');
set(findobj('FontSize',10),'FontSize',figure_FontSize);
set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',2);%%%%%%%%%%%%%%%%%%%%%%%%%%%%解释:set(gcf,'Position',[100 100 260 220]);
这句是设置绘图的大小,不需要到word里再调整大小。我给的参数,图的大小是7cmset(gca,'Position',[.13 .17 .80 .74]);
这句是设置xy轴在图片中占的比例,可能需要自己微调。figure_FontSize=8;
set(get(gca,'XLabel'),'FontSize',figure_FontSize,'Vertical','top');
set(get(gca,'YLabel'),'FontSize',figure_FontSize,'Vertical','middle');
set(findobj('FontSize',10),'FontSize',figure_FontSize);这4句是将字体大小改为8号字,在小图里很清晰set(findobj(get(gca,'Children'),'LineWidth',0.5),'LineWidth',2);
这句是将线宽改为2
#Matlab
来自百度空间:http://hi.baidu.com/littlelovecat/item/7d85e3abdbdd13238819d31b

评分

参与人数 1金钱 +10 贡献 +2 收起 理由
言深深 + 10 + 2

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-9 11:04:43 | 显示全部楼层
谢谢分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-9 12:55:43 | 显示全部楼层
谢谢分享              
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2013-9-9 20:54:43 | 显示全部楼层
谢谢分享!!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-6-30 14:36:25 | 显示全部楼层
试试,正在头疼这个问题,figure窗口装不下我的图像,不知道怎么调整。
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-8-2 16:58:22 | 显示全部楼层
好实用,谢谢
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-3-9 17:37:17 | 显示全部楼层
{:eb502:}{:eb502:}谢谢分享!!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2017-3-9 22:54:34 | 显示全部楼层
实用,谢谢!
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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