图形尺寸限制
Limit of figure dimensions
在回答这个 和与问题无关的问题时,在创建高度非常高的图形时,我发现图形被裁剪了。如果图的子项的 'units'
属性设置为 'normalized'
,相应的子项将缩小而不是裁剪。
问题是,为什么图形的高度受到限制,限制的规则是什么(属性)。看起来我的图形高度限制为 9.94"(Dell Latitude E5500;Win7 enterpise,32 位;matlab 2011b;分辨率 1400x900 像素)
编辑
我试过这个:
>> set(gcf,'position',[10 10 600 600]),get(gcf,'position')
ans =
10.0000 10.0000 28.3333 9.8750
>> set(gcf,'position',[0 0 600 600]),get(gcf,'position')
ans =
0 0 600 600
在 Adobe acrobat 9 Pro 中测量,export_fig
获得的数字在两种情况下均为 28.35" x 9.88"。
我怀疑这与 Matlab 检测到的最大显示尺寸和您系统的像素密度有关。
在我的Matlab R2013a上,Windows7,屏幕1900x1200,我可以得到比你大的图,但还是会被截断:
%% // MATLAB R2013A - Windows 7, 1900x1200pixels
set(gcf,'units','inches','position',[1 -5 6 15])
get(gcf,'position')
get(gcf,'OuterPosition')
returns:
ans =
1.00 -5.00 6.00 11.81
ans =
0.92 -5.08 6.17 12.71
我的最大垂直图形尺寸被裁减为 11.81
英寸。现在这是 Matlab 图的内部。包括标题栏和边框在内的实际大小由 属性 OuterPosition
.
给出
现在考虑:
>> get(0,'ScreenSize')
ans =
1.00 1.00 1920.00 1200.00
>> get(0,'ScreenPixelsPerInch')
ans =
96.00
如果我们做1200pixel/96ppi=12.5。在这种屏幕密度下,Matlab 只能显示 12.5 英寸的图形。如果将单位设置为 'Pixels':
,这将是均匀模式明显的
set(gcf,'units','inches','position',[1 -5 6 15])
set(gcf,'units','Pixels')
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
97.00 -479.00 576.00 1134.00
ans =
89.00 -487.00 592.00 1220.00
该图恰好被截断为 1220 像素(英寸单位只是一种转换,Matlab 基本单位将以像素为单位)。我怀疑允许的额外 20 个像素是标题栏的额外余量。
现在有了你的数字,我没有你的数字outerposition
,但即使是数字内部位置也大致符合你的屏幕尺寸(900px*96ppi=9.375inches)。尝试强制单位回到 Pixels
,得到数字的 OuterPosition
如果你得到 920pixels 我不会感到惊讶。
现在看来你只需要为旧版本的 Matlab 担心。在同一台机器上(Win 7, 1900x1200px),使用 Matlab R2015b,不再自动裁剪:
%% // MATLAB R2015B - Windows 7, 1900x1200pixels
set(gcf,'units','inches','position',[1 -5 6 15])
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
1.00 -5.00 6.00 15.00
ans =
0.92 -5.08 6.17 15.40
set(gcf,'units','Pixels')
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
97.00 -479.00 576.00 1440.00
ans =
89.00 -487.00 592.00 1478.00
新的 Matlab 图形引擎似乎解除了这个限制,我的图形现在比我的屏幕尺寸(无论是像素还是英寸)都大。
在回答这个 'units'
属性设置为 'normalized'
,相应的子项将缩小而不是裁剪。
问题是,为什么图形的高度受到限制,限制的规则是什么(属性)。看起来我的图形高度限制为 9.94"(Dell Latitude E5500;Win7 enterpise,32 位;matlab 2011b;分辨率 1400x900 像素)
编辑
我试过这个:
>> set(gcf,'position',[10 10 600 600]),get(gcf,'position')
ans =
10.0000 10.0000 28.3333 9.8750
>> set(gcf,'position',[0 0 600 600]),get(gcf,'position')
ans =
0 0 600 600
在 Adobe acrobat 9 Pro 中测量,export_fig
获得的数字在两种情况下均为 28.35" x 9.88"。
我怀疑这与 Matlab 检测到的最大显示尺寸和您系统的像素密度有关。
在我的Matlab R2013a上,Windows7,屏幕1900x1200,我可以得到比你大的图,但还是会被截断:
%% // MATLAB R2013A - Windows 7, 1900x1200pixels
set(gcf,'units','inches','position',[1 -5 6 15])
get(gcf,'position')
get(gcf,'OuterPosition')
returns:
ans =
1.00 -5.00 6.00 11.81
ans =
0.92 -5.08 6.17 12.71
我的最大垂直图形尺寸被裁减为 11.81
英寸。现在这是 Matlab 图的内部。包括标题栏和边框在内的实际大小由 属性 OuterPosition
.
现在考虑:
>> get(0,'ScreenSize')
ans =
1.00 1.00 1920.00 1200.00
>> get(0,'ScreenPixelsPerInch')
ans =
96.00
如果我们做1200pixel/96ppi=12.5。在这种屏幕密度下,Matlab 只能显示 12.5 英寸的图形。如果将单位设置为 'Pixels':
,这将是均匀模式明显的set(gcf,'units','inches','position',[1 -5 6 15])
set(gcf,'units','Pixels')
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
97.00 -479.00 576.00 1134.00
ans =
89.00 -487.00 592.00 1220.00
该图恰好被截断为 1220 像素(英寸单位只是一种转换,Matlab 基本单位将以像素为单位)。我怀疑允许的额外 20 个像素是标题栏的额外余量。
现在有了你的数字,我没有你的数字outerposition
,但即使是数字内部位置也大致符合你的屏幕尺寸(900px*96ppi=9.375inches)。尝试强制单位回到 Pixels
,得到数字的 OuterPosition
如果你得到 920pixels 我不会感到惊讶。
现在看来你只需要为旧版本的 Matlab 担心。在同一台机器上(Win 7, 1900x1200px),使用 Matlab R2015b,不再自动裁剪:
%% // MATLAB R2015B - Windows 7, 1900x1200pixels
set(gcf,'units','inches','position',[1 -5 6 15])
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
1.00 -5.00 6.00 15.00
ans =
0.92 -5.08 6.17 15.40
set(gcf,'units','Pixels')
get(gcf,'position')
get(gcf,'OuterPosition')
ans =
97.00 -479.00 576.00 1440.00
ans =
89.00 -487.00 592.00 1478.00
新的 Matlab 图形引擎似乎解除了这个限制,我的图形现在比我的屏幕尺寸(无论是像素还是英寸)都大。