想要用matplotlib画多个子图有多种方法,但是如果子图太多,画面就会很混乱,这里给出一种方法,能够使画面在保留必要信息的前提下,尽量简洁,如下图所示。
思路是这样的,在一个fig上先画一张只有坐标轴的空图ax_big:
fig, ax_big = plt.subplots( figsize=(30, 15))
对ax_big 的坐标轴进行偏移、隐藏、以及label设置。
随后再add多个子图,并进行子图的坐标轴设置:
ax = fig.add_subplot(3, 4, i)
这样,最后显示的时候,会把 ax_big 和多个 ax 重叠显示。
代码:
#!/usr/bin/env python3
# -*- coding: utf-8 -*
import numpy as np
import matplotlib.pyplot as plt
from pylab import mpl
def draw_picture_11(path_picture):
# mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
# fig= plt.figure('222', figsize=(15, 15)) # 这是画一张空figure,上面什么都没有
fig, ax_big = plt.subplots( figsize=(30, 15)) # 这是figure上有一张名叫 ax_big 的空图,上面是有坐标系的
axis = plt.gca() # gca 'get current axes' 获取图像的坐标轴对象
axis.spines['right'].set_color('none') # 隐藏右和上坐标轴
axis.spines['top'].set_color('none')
axis.spines['bottom'].set_position(('outward', 30)) # 偏移左和下坐标轴
axis.spines['left'].set_position(('outward', 30))
ax_big.set_xticks([]) # 隐藏坐标轴刻度
ax_big.set_yticks([])
ax_big.set_xlabel('time (s)', fontsize=13, fontstyle='italic') # 设置字号,斜体
ax_big.set_ylabel('longitudinal sensor output', fontsize=13, fontstyle='italic')
for i in range(1,13): # add_subplot() 不能从0开始
x = np.linspace(0, 10, 100)
y = np.sin(x)
# draw and save the figure
ax = fig.add_subplot(3, 4, i)
ax.plot(x, y)
# ax.set_xticks([0, 5, 10], True)
ax.set_xticks([0, 5, 10]) # 设置子图的坐标轴刻度
ax.set_yticks([-2, 0, 2])
fig.savefig(path_picture + '6666', dpi=300)
plt.show()
if __name__ == '__main__':
path_picture = r'G:\TEST\abaqus_text\paper_simulation\picture_file\\'
draw_picture_11(path_picture)
参考:
https://blog.csdn.net/rumswell/article/details/9862089
https://blog.csdn.net/rumswell/article/details/9862089
https://blog.csdn.net/sinat_36772813/article/details/77160562