Matplotlib不同大小的subplots
我需要给一个数字添加两个子图。 一个小区需要大约三倍于第二个(相同的高度)。 我使用GridSpec
和colspan
参数完成了这个,但是我想用figure
来做这个,所以我可以保存为PDF。 我可以使用figsize
函数中的figsize
参数来调整第一个graphics,但是如何更改第二个graphics的大小?
你可以使用gridspec
和figure
:
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')
我用pyplot
的axes
对象手动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()