我希望Matplotlib/Pyplot能够生成具有一致画布大小的图表。也就是说,图形可以根据轴标注的不同占用不同的大小,但绘图区域(曲线绘制的矩形区域)的大小应始终保持相同。
是否有一种简单的方法来实现这一点? pyplot.figure() 的选项 figsize 似乎设置整个图形的大小,而不是画布的大小,因此每当轴描述占用更多或更少的空间时,我都会得到不同的画布大小。
我希望Matplotlib/Pyplot能够生成具有一致画布大小的图表。也就是说,图形可以根据轴标注的不同占用不同的大小,但绘图区域(曲线绘制的矩形区域)的大小应始终保持相同。
是否有一种简单的方法来实现这一点? pyplot.figure() 的选项 figsize 似乎设置整个图形的大小,而不是画布的大小,因此每当轴描述占用更多或更少的空间时,我都会得到不同的画布大小。
import matplotlib.pyplot as plt
import urllib2
# load the image
img = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))
# get the dimensions
ypixels, xpixels, bands = img.shape
# get the size in inches
dpi = 72.
xinch = xpixels / dpi
yinch = ypixels / dpi
# plot and save in the same size as the original
fig = plt.figure(figsize=(xinch,yinch))
ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
plt.savefig('D:\\mpl_logo.png', dpi=dpi, transparent=True)
注意,我手动定义了轴的位置,以使其覆盖整个图形。fig = plt.figure(figsize=(xinch,yinch/.8))
ax = plt.axes([0., 0., 1., .8], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
ax.set_title('Matplotlib is fun!', size=16, weight='bold')
plt.savefig('D:\\mpl_logo_with_title.png', dpi=dpi)
因此,图形的y尺寸(高度)增加,轴的y尺寸也同样减小。这将产生一个较大(总体)的输出图像,但轴区域仍将保持相同的大小。
如果有像.set_scale()这样的图形或轴属性来强制实现真正的1-on-x输出,那就太好了。
import matplotlib
matplotlib.rcParams['figure.figsize'] = [10, 10] # for square canvas
matplotlib.rcParams['figure.subplot.left'] = 0
matplotlib.rcParams['figure.subplot.bottom'] = 0
matplotlib.rcParams['figure.subplot.right'] = 1
matplotlib.rcParams['figure.subplot.top'] = 1
gridspec
允许您控制您想要的内容(请参见此处的最后3个示例)。您能否添加一些示例,显示导致问题的不同轴描述? - Bonlenfumtight_layout
,是最好的选择。 - tacaswell