Matplotlib不同大小的subplots

我需要给一个数字添加两个子图。 一个小区需要大约三倍于第二个(相同的高度)。 我使用GridSpeccolspan参数完成了这个,但是我想用figure来做这个,所以我可以保存为PDF。 我可以使用figsize函数中的figsize参数来调整第一个graphics,但是如何更改第二个graphics的大小?

你可以使用gridspecfigure

 import numpy as np import matplotlib.pyplot as plt from matplotlib import gridspec # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it fig = plt.figure(figsize=(8, 6)) gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) ax0 = plt.subplot(gs[0]) ax0.plot(x, y) ax1 = plt.subplot(gs[1]) ax1.plot(y, x) plt.tight_layout() plt.savefig('grid_figure.pdf') 

导致阴谋

另一种方法是使用gridspec_kw函数并通过gridspec_kw传递宽度比例:

 import numpy as np import matplotlib.pyplot as plt # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it f, (a0, a1) = plt.subplots(1,2, gridspec_kw = {'width_ratios':[3, 1]}) a0.plot(x,y) a1.plot(y,x) f.tight_layout() f.savefig('grid_figure.pdf') 

可能最简单的方法是使用subplot2grid ,在使用subplot2grid 定制子图的位置中描述。

 ax = plt.subplot2grid((2, 2), (0, 0)) 

等于

 import matplotlib.gridspec as gridspec gs = gridspec.GridSpec(2, 2) ax = plt.subplot(gs[0, 0]) 

所以bmu的例子变成:

 import numpy as np import matplotlib.pyplot as plt # generate some data x = np.arange(0, 10, 0.2) y = np.sin(x) # plot it fig = plt.figure(figsize=(8, 6)) ax0 = plt.subplot2grid((1, 3), (0, 0), colspan=2) ax0.plot(x, y) ax1 = plt.subplot2grid((1, 3), (0, 2)) ax1.plot(y, x) plt.tight_layout() plt.savefig('grid_figure.pdf') 

我用pyplotaxes对象手动resize,而不使用GridSpec

 import matplotlib.pyplot as plt import numpy as np x = np.arange(0, 10, 0.2) y = np.sin(x) # definitions for the axes left, width = 0.07, 0.65 bottom, height = 0.1, .8 bottom_h = left_h = left+width+0.02 rect_cones = [left, bottom, width, height] rect_box = [left_h, bottom, 0.17, height] fig = plt.figure() cones = plt.axes(rect_cones) box = plt.axes(rect_box) cones.plot(x, y) box.plot(y, x) plt.show()