Matplotlib:.subplots()绘制多子图

matplotlib.pyplot.subplots

matplotlib调整子图间距,调整整体空白的方法

fig.tight_layout()#调整整体空白
plt.subplots_adjust(wspace =0, hspace =0)#调整子图间距

创建一个图像对象(figure) 和 一系列的子图(subplots)。 源码 matplotlib.pyplot.subplots
def subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True,
             subplot_kw=None, gridspec_kw=None, **fig_kw):
    fig = figure(**fig_kw)
    axs = fig.subplots(nrows=nrows, ncols=ncols, sharex=sharex, sharey=sharey,
                       squeeze=squeeze, subplot_kw=subplot_kw,
                       gridspec_kw=gridspec_kw)
    return fig, axs

参数
nrows,ncols:

  • 子图的行列数。

sharex, sharey:

  • 设置为 True 或者 ‘all’ 时,所有子图共享 x 轴或者 y 轴,
  • 设置为 False or ‘none’ 时,所有子图的 x,y 轴均为独立,
  • 设置为 ‘row’ 时,每一行的子图会共享 x 或者 y 轴,
  • 设置为 ‘col’ 时,每一列的子图会共享 x 或者 y 轴。

squeeze:

  • 默认为 True,是设置返回的子图对象的数组格式。
  • 当为 False 时,不论返回的子图是只有一个还是只有一行,都会用二维数组格式返回他的对象。
  • 当为 True 时,如果设置的子图是(nrows=ncols=1),即子图只有一个,则返回的子图对象是一个标量的形式,如果子图有(N×1)或者(1×N)个,则返回的子图对象是一个一维数组的格式,如果是(N×M)则是返回二位格式。

subplot_kw:

  • 字典格式,传递给 add_subplot() ,用于创建子图。
  • gridspec_kw:
    字典格式,传递给 GridSpec 的构造函数,用于创建子图所摆放的网格。
  • class matplotlib.gridspec.GridSpec(nrows, ncols, figure=None, left=None, bottom=None, right=None, top=None, wspace=None, hspace=None, width_ratios=None, height_ratios=None)
  • 如,设置 gridspec_kw={‘height_ratios’: [3, 1]} 则子图在列上的分布比例是3比1。
    **fig_kw :
  • 所有其他关键字参数都传递给 figure()调用。
  • 如,设置 figsize=(21, 12) ,则设置了图像大小。

返回值

  • fig: matplotlib.figure.Figure 对象
  • ax:子图对象( matplotlib.axes.Axes)或者是他的数组
    fig, axes = plt.subplots(23):即表示一次性在figure上创建成2*3的网格,
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 2 * np.pi, 400)
y = np.sin(x ** 2)

# 创建一个子图
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')

plt.show()

Matplotlib:.subplots()绘制多子图_第1张图片

# 创建两个子图,并且共享y轴
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)

Matplotlib:.subplots()绘制多子图_第2张图片

# 创建4个子图,
fig, axes = plt.subplots(2, 2, subplot_kw=dict(polar=True))# polar:极地
axes[0, 0].plot(x, y)
axes[1, 1].scatter(x, y)

Matplotlib:.subplots()绘制多子图_第3张图片

# 共享每列子图的x轴
plt.subplots(2, 2, sharex='col')

Matplotlib:.subplots()绘制多子图_第4张图片

# 共享每行子图的y轴
plt.subplots(2, 2, sharey='row')

Matplotlib:.subplots()绘制多子图_第5张图片

# 共享所有子图的x和y轴
# plt.subplots(2, 2, sharex='all', sharey='all')
plt.subplots(2, 2, sharex=True, sharey=True)

Matplotlib:.subplots()绘制多子图_第6张图片

自定义图表样式:比如旋转x轴标签、上边和右边的坐标轴不显示、曲线和y轴对齐等

import matplotlib.pyplot as plt
 
plt.rcParams['font.family'] = ['SimHei']              # 解决不能输出中文的问题。不区分大小写,即SimHei’效果等价于‘simhei’,中括号可以不要
plt.rcParams['figure.autolayout'] = True              # 解决不能完整显示的问题(比如因为饼图太大,显示窗口太小)
  
fig, ax = plt.subplots(1, 1, figsize=(12, 9))         # 进一步设定fig的size为12*9
 
ax.spines['top'].set_visible(False)                   # 不显示图表框的上边框
ax.spines['right'].set_visible(False)                 # 不显示图表框的右边框
 
ax.set_xlim(0, 10)                                    # 有时候x轴不会从0显示,使得折线图和y轴有间隙
ax.set_ylim(0, 1.3e8)                                 # 和x轴同理
 
plt.xticks(range(0, 10), fontsize=12, rotation=80)    # 针对x轴的标签,指定我们想要设定的范围是(0, 10), 字体大小是12, 逆时针旋转80°
 
plt.tick_params(bottom='off', left='off', labelbottom='on', lableleft='on')  # 使x轴和y轴不带比例标识点, labelbottom设定下边、即x轴的标签是否显示。
 
< blabla... >
 
plt.suptitle('自定义图表', fontsize=400, ha='center')  # 即标题在x轴和y轴形成的方框内部,如下图(详细用法见下注释)。如果需要标题在这上方,使用 plt.title(blabla)            
plt.show()
 
"""
对于multiple subplots一般情况下,
1)设置 plt.xticks(range(0, 10))只会对最后一个ax起作用。要想作用于所有subplots,要这样:
for ax in axes:
    ax.set_xticks(range(0, 10))
2)标题:显示中文方面-在各个子图上要这样:
plt.tile('某个子图的中文title', fontproperties='simhei'),
因为plt.rcParams['font.family'] = 'simhei' 只对整体的标题是有效的。整体的标题要这样设置:
plt.suptitle(‘全体子图的中文title’)
3)xticks的旋转方面。例如上面的主副坐标轴的共x轴,要这样:
ax1.set_xticklabels(['str format labels'], rotation=80)
而这样的设置无效:plt.xticks(x, rotation=80)。
"""

你可能感兴趣的:(Matplotlib绘图,subplots)