图形尺寸限制

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

在 Adob​​e 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 图形引擎似乎解除了这个限制,我的图形现在比我的屏幕尺寸(无论是像素还是英寸)都大。