探索数据可视化:Matplotlib 多图布局

多图布局

子视图

import numpy as np
import matplotlib.pyplot as plt

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

plt.figure(figsize=(9,6))

# 创建子视图
# subplot(2,1,1)表示将当前图形分割成 2 行 1 列的子图网格,并在第 1 个子图位置绘制图形
ax = plt.subplot(2,1,1)
ax.plot(x,np.sin(x))

# 后面这个2就是编号,从1,开始
ax = plt.subplot(2,1,2) # 2行,1列,第二个视图
ax.plot(x, np.cos(x))

在这里插入图片描述

# subplots(2,2) # 分割2行2列四个图
fig,axes = plt.subplots(2,2) 

# 索引,0开始
axes[0,0].plot(x,np.sin(x),color = 'red')

axes[0,1].plot(x,np.sin(x),color = 'green')

axes[1,0].plot(x,np.cos(x),color = 'purple')

axes[1,1].plot(x,np.cos(x))

在这里插入图片描述

x = np.linspace(-np.pi,np.pi,20)
y = np.sin(x)

# 子视图1
plt.figure(figsize=(9,6))
ax = plt.subplot(221) # 两行两列第一个子视图
# 调用子视图设置方法,设置子视图线条为红色,背景为绿色
ax.plot(x,y,color = 'red')
ax.set_facecolor('green')


# 子视图2
ax = plt.subplot(2,2,2) # 两行两列第二个子视图
line, = ax.plot(x,-y) # 返回绘制对象,列表中只有一个数据,取出来
line
line.set_marker('*') # 调用对象设置方法,设置属性
# 设置标记点填充红色
line.set_markerfacecolor('red')
# 设置标记点的边缘颜色为绿色
line.set_markeredgecolor('green')
# 设置标记点的大小为10
line.set_markersize(10)
# 子视图3
ax = plt.subplot(2,1,2) # 两行一列第二行视图
# 设置当前视图;当前坐标轴为第三个子图的坐标轴对象
plt.sca(ax) 

x = np.linspace(-np.pi,np.pi,200)

# 直接调用plt
plt.plot(x,np.sin(x*x),color = 'red')

在这里插入图片描述

嵌套视图

x = np.linspace(-np.pi,np.pi,25)
y = np.sin(x)
fig = plt.figure(figsize=(9,6)) # 创建视图
plt.plot(x,y)


# 嵌套方式一,axes轴域(横纵坐标范围),子视图
# 参数含义[left, bottom, width, height]
# 表示新创建的坐标轴的左下角位于图形宽度的 20% 处,底部位于图形高度的 55% 处,
# 宽度为图形宽度的 30%,高度为图形高度的 30%
ax = plt.axes([0.2,0.55,0.3,0.3]) 
ax.plot(x,y,color = 'g')

# 嵌套方式二
# 具体对象,添加子视图
ax = fig.add_axes([0.55,0.2,0.3,0.3]) # 使用视图对象添加子视图
ax.plot(x,y,color = 'r')

在这里插入图片描述

x = np.linspace(0,2*np.pi)
# sharex:所有小图共享x轴  sharey:表示所有小图共享y轴  坐标轴以所有小图中范围最大的进行显示
fig, ((ax11,ax12,ax13), (ax21,ax22,ax23),(ax31,ax32,ax33)) = plt.subplots(3, 3)

# 也可通过plt.subplot() 一个个添加子视图
fig.set_figwidth(9)
fig.set_figheight(6)

ax11.plot(x,np.sin(x))
ax12.plot(x,np.cos(x))
ax13.plot(x,np.tanh(x))
ax21.plot(x,np.tan(x))
ax22.plot(x,np.cosh(x))
ax23.plot(x,np.sinh(x))
ax31.plot(x,np.sin(x) + np.cos(x))
ax32.plot(x,np.sin(x*x) + np.cos(x*x))
ax33.plot(x,np.sin(x)*np.cos(x))

# 紧凑显示,边框会比较小
# 确保子图之间的间距合适,使得整体布局更加美观
plt.tight_layout()
plt.show()

在这里插入图片描述

x = np.linspace(0,2*np.pi,200)
fig = plt.figure(figsize=(12,9))


# 使用切片方式设置子视图
ax1 = plt.subplot(3,1,1) # 视图对象添加子视图 3行,1列,第一个视图
ax1.plot(x, np.sin(10*x))
# 设置ax1的标题,xlim、ylim、xlabel、ylabel等所有属性现在只能通过set_属性名的方法设置
ax1.set_title('ax1_title')  # 设置小图的标题


# 添加:第二行,第一和第二列
# 在一个3x3的子图网格中创建一个占据第4和第5位置的子图
ax2 = plt.subplot(3,3,(4,5))
ax2.set_facecolor('green')
ax2.plot(x,np.cos(x),color = 'red')

# 添加,右下角,那一列
# 创建一个占据第6和第9位置的子图
ax3 = plt.subplot(3,3,(6,9))
ax3.plot(x,np.sin(x) + np.cos(x))

# 创建一个占据第7位置的子图
ax4 = plt.subplot(3,3,7)
ax4.plot([1,3],[2,4])

# 创建一个占据第8位置的子图
ax5 = plt.subplot(3,3,8)
# 绘制散点图;3个点(1,0),(2,2),(3,4)
ax5.scatter([1,2,3], [0,2,4])
ax5.set_xlabel('ax5_x',fontsize = 12)
ax5.set_ylabel('ax5_y',fontsize = 12)

plt.show()

在这里插入图片描述

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值