Matplotlib绘制多个子图

逐一添加子图

# 逐一添加绘图子区

import numpy as np
import matplotlib.pyplot as plt

PI = np.pi
x = np.linspace(0, 2*PI, 20)

# 绘图板1
fig1 = plt.figure(1, figsize=(6, 2))  # 创建绘图板1,figsize为绘图板尺寸
ax1 = fig1.add_subplot(121)           # 在绘图板1指定位置添加一个绘图子区(坐标轴),\
                                      # 参数121创建1行2列个子图,当前子图在第1个区域
ax1.plot(x, np.sin(x), x, np.sin(x+PI/2))  # 输入多组x、y数据,一个坐标系中绘制多条曲线 
ax1.set_title("f(x)=sin(x)")

ax2 = fig1.add_subplot(122)
ax2.plot(x, np.cos(x), linestyle="--", color="orange")
ax2.set_title("f(x)=cos(x)")
fig1.tight_layout()                        # 默认自动调整多个子图间距

# 绘图板2
fig2= plt.figure(2, figsize=(6.8, 2))      # 创建绘图板2
ax3 = fig2.add_subplot(111)
ax3.plot([1, 2, 3])                        # 只输入一个参数时,参数作为Y轴数据,X轴数据以索引自动生成

# 添加图中图
# 添加新的绘图子区,位置(0.5,0.75),宽高(0.05,0.1),相对尺寸
ax31 = fig2.add_axes([0.2, 0.55, 0.2, 0.25])
ax31.plot(x, np.sin(x), ls='--', color='orange')  
ax32 = fig2.add_axes([0.65, 0.25, 0.2, 0.25])
ax32.plot(x, np.cos(x), ls='-', color='red')
plt.show()

创建一系列子图

# 一次创建多个绘图子区

import numpy as np
import matplotlib.pyplot as plt

PI = np.pi
x = np.linspace(0, 2*PI, 50)

# 创建一个绘图板和多个绘图子区
fig, ax = plt.subplots(2, 3, figsize=(10, 3), sharex=True, sharey=True)
# fig.set_size_inches(10, 3)          # 调整绘图板尺寸
fig.set_dpi(100)
fig.tight_layout(h_pad=0.5, w_pad=0)  # 调整绘图子区间距

# 按索引选择绘图子区绘图
# ax[0, 0].plot(x, np.sin(x))         
# ax[1, 0].plot(x, np.cos(x))

# 通过for循环绘制一系列子图
n = 0
for i in range(2):
    for j in range(3):
        ax[i, j].plot(x, np.sin(x+n*PI/2))  # 图形每次左移PI/2
        n += 1
ax[0, 0].set_xticks(np.linspace(0, 6, 10), minor=True)
ax[0, 0].grid(which='both', axis='both', ls='--')

# 添加图中图,位置(0.5,0.75),宽高(0.05,0.1),相对尺寸
ax1 = fig.add_axes([0.5, 0.75, 0.05, 0.1])  
ax1.plot(x, np.sin(x))
plt.rcParams['xtick.labelsize'] = 10
plt.rcParams['ytick.labelsize'] = 10
plt.show()

共x轴绘图

# 共x轴绘图

import numpy as np
import matplotlib.pyplot as plt

PI = np.pi
x = np.linspace(0, 2*PI, 21)
fig1 = plt.figure(1, figsize=(6, 2)) 
ax1 = fig1.add_subplot(111) 
ax1.set_ylabel("sine")
pic1 = ax1.plot(x, np.sin(x), label="sine(x)") 

ax2 = ax1.twinx()          # 两组数据公用一个x轴
ax2.set_ylabel("cosine")
pic2 = ax2.plot(x, np.cos(x) * 0.1, label="cosine(x)", linestyle="--", color="orange")

# 合并图例
pic = pic1 + pic2 
labels = [i.get_label() for i in pic]
ax2.legend(pic, labels, loc="best", fontsize=10)
# fig1.legend(bbox_to_anchor=(0,0.5), fontsize=10) # 图例放在图外,bbox_to_anchor设定图例的位置,数值为相对比例
plt.show()

子图的设置

# 子图的设置

import numpy as np
import matplotlib.pyplot as plt

PI = np.pi
x = np.linspace(0, 2*PI, 21)

fig = plt.figure(figsize=(6,2))
ax = fig.add_subplot(111)
ax.plot(x, np.sin(x), linewidth=1, linestyle="-", marker="o", markersize=5, 
        markerfacecolor="orange", label="sin(x)")
ax.plot(x, np.sin(x+PI/2), linewidth=1, linestyle="--", marker="D", markersize=5, label="cos(x)")
ax.set_title("f(x)=sin(x)", fontsize=10)
ax.set_xlabel("x", fontsize=16)
ax.set_ylabel("sin(x)", fontsize=10)
ax.set_xticks(np.linspace(0, 2*PI, 5))               # x轴主刻度
ax.set_xticks(np.linspace(0, 2*PI, 21), minor=True)  # x轴次刻度
ax.set_yticks(np.linspace(-1, 1, 3))                 # y轴主刻度
ax.set_yticks(np.linspace(-1, 1, 5), minor=True)     # y轴次刻度
ax.set_xticklabels(["0",r"$\frac{\pi}{2}$",r"$\pi$",r"$\frac{3\pi}{2}$",r"$2\pi$"])    # x轴主刻度标签
ax.set_xticklabels(["%.1f$\pi$" % (i/10) for i in range(21)], minor=True, fontsize=6)  # x轴次刻度标签
# ax.set_axis_off()                   # 不显示坐标轴
ax.text(PI, 0, r"($\pi$,0)")          # 在图上添加注释
ax.legend(loc="best", fontsize=12)    # 添加图例
ax.grid(True, which="major", linewidth=1, axis="both")   # 主网格
ax.grid(True, which="minor", linestyle="--", alpha=0.6)  # 次网格
# ax.set_xlim(0, 2*PI)  # 设置x轴范围
# ax.set_ylim(-1, 1)    # 设置y轴范围
plt.show()
  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值