python调整画图大小_matplotlib:调整图形窗口的大小而不缩放图形内容

在Matplotlib中,似乎没有一种简单的方法可以在更改图形大小的同时冻结轴(或画布)的大小。可能有一种通过“Transforms”的方法,因为似乎有一个frozen方法,BBoxBase可能让人想起一个MATLAB函数(在MEX上),但是Matplotlib站点上目前没有提供文档。在

一般来说,我建议单独构建体形结构,然后在实际渲染之前调整轴/画布的大小,使其达到新的体形大小。在

例如,在下面,figure_3x1使用选项字典opts中指定的体形尺寸作为6.5×5.5英寸的figure_3x1构建一个带有3x1子图的通用图形:def varargin(pars,**kwargs):

"""

varargin-like option for user-defined parameters in any function/module

Use:

pars = varargin(pars,**kwargs)

Input:

- pars : the dictionary of parameters of the calling function

- **kwargs : a dictionary of user-defined parameters

Output:

- pars : modified dictionary of parameters to be used inside the calling

(parent) function

"""

for key,val in kwargs.iteritems():

if key in pars:

pars[key] = val

return pars

def figure_3x1(**kwargs):

'''

figure_3x1(**kwargs) : Create grid plot for a 1-column complex figure composed of (top-to-bottom):

3 equal plots | custom space

Input:

- left,right,top,bottom

- vs : [val] vertical space between plots

- figsize : (width,height) 2x1 tuple for figure size

Output:

- fig : fig handler

- ax : a list of ax handles (top-to-bottom)

'''

opts = {'left' : 0.1,

'right' : 0.05,

'bottom' : 0.1,

'top' : 0.02,

'vs' : [0.03],

'figsize': (6.5,5.5), # This is the figure size with respect

# to axes will be sized

}

# User-defined parameters

opts = varargin(opts,**kwargs)

nrow = 3

# Axis specification

AxisWidth = 1.0-opts['left']-opts['right']

AxisHeight = [(1.0-opts['bottom']-opts['top']-2*opts['vs'][0])/nrow]

# Axis Grid

# x position

xpos = opts['left']

# y position

ypos = list()

ypos.append(opts['bottom'])

ypos.append(ypos[0]+AxisHeight[0]+opts['vs'][0])

ypos.append(ypos[1]+AxisHeight[0]+opts['vs'][0])

# Axis boxes (bottom-up)

axBoxes = list()

axBoxes.append([xpos,ypos[0],AxisWidth,AxisHeight[0]])

axBoxes.append([xpos,ypos[1],AxisWidth,AxisHeight[0]])

axBoxes.append([xpos,ypos[2],AxisWidth,AxisHeight[0]])

fig = plt.figure(1, figsize=opts['figsize'])

ax = list()

for i in xrange(shape(axBoxes)[0]-1,-1,-1):

ax_aux = fig.add_axes(axBoxes[i])

ax.append(ax_aux)

return fig, ax

现在,我想构建一个类似的图形,保持轴的大小和位置相同(相对于左/下角),但是图形中的空间更大。例如,如果我想在其中一个绘图或多个y轴上添加一个颜色条,然后我需要将多个3x1图形一起显示,以供发布时使用。我们的想法是计算出新图形的实际尺寸,以容纳所有新元素——假设我们需要一个尺寸为7.5x5.5英寸的图形——并根据新图形尺寸调整轴框及其x-y坐标,以便在图形中达到6.5x5.5英寸的原始尺寸。为此,我们在figure_3x1(**kwargs)的opts中引入了一个进一步的选项axref_size,它是一个类型为(width, height)的元组,它描述了相对于我们希望在新的更大图形中构建(和调整大小)轴的图形大小(以英寸为单位)。在这些轴的宽度(AxisWidth)和高度(AxisHeight)相对于较大的图形进行计算后,我们根据left和{}坐标,以及不同轴之间的垂直/水平空间,即hs和vs来调整它们的大小,以获得原始的axref_size图形的大小。在

实际大小调整通过以下方法实现:

^{pr2}$

这样figure_3x1(**kwargs)将被编辑为:def figure_3x1(**kwargs):

'''

figure_3x1(**kwargs) : Create grid plot for a 1-column complex figure composed of (top-to-bottom):

3 equal plots | custom space

Include also the option of specifying axes size according to a reference figure size

'''

opts = {'left' : 0.1,

'right' : 0.05,

'bottom' : 0.1,

'top' : 0.02,

'vs' : [0.03],

'figsize': (6.5,5.5), # This is the figure size with respect

# to axes will be sized

'axref_size': None}

...

...

# Axis specification

AxisWidth = 1.0-opts['left']-opts['right']

AxisHeight = [(1.0-opts['bottom']-opts['top']-2*opts['vs'][0])/nrow]

# Optional resizing

opts, AxisWidth, AxisHeight = freeze_canvas(opts, AxisWidth, AxisHeight)

# Axis Grid

# x position

...

...

return fig, ax

以这种方式figure_3x1(figsize=(7.5,5.5),axref_size=(6.5,5.5))

生成以下较大的图形(即7.5x5.5英寸),但子批次的轴尺寸与上图中的6.5x5.5英寸的尺寸相同。同样,正如另一个回复中指出的,由于图像托管服务缩放了总的图像大小,所以图显示得更小。在

你可能感兴趣的:(python调整画图大小)