Python/Matplotlib - Change the relative size of a subplot
Yes, and if you want to reduce your code to a single line, you can put all kwargs that are to be passed to matplotlib.gridspec.GridSpec()
, into the gridspec_kw
parameter of plt.subplots()
:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
fig, axs = plt.subplots(nrows=2, ncols=2, gridspec_kw={'width_ratios':[2,1], 'height_ratios':[2,1]})
df = pd.DataFrame(np.random.randn(10, 3), columns=['A', 'B', 'C'])
df.plot.bar(ax=axs[0][0])
df.boxplot(ax=axs[0][1])
df.plot.line(ax=axs[1][0])
df.plot.kde(ax=axs[1][1])
See the grid-spec tutorial:
http://matplotlib.sourceforge.net/users/gridspec.html
Example code:
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
f = plt.figure()
gs = gridspec.GridSpec(1, 2,width_ratios=[2,1])
ax1 = plt.subplot(gs[0])
ax2 = plt.subplot(gs[1])
plt.show()
You can also adjust the height ratio using a similar option in GridSpec
By simply specifying the geometry with “122
”, you're implicitly getting the automatic, equal-sized columns-and-rows layout.
To customise the layout grid, you need to get a little more specific. See “Customizing Location of Subplot Using GridSpec” in the Matplotlib docs.