创建图像对象

一、设置图像分辨率大小和信息

plt.rcParams['figure.figsize']=(8,8) #宽 8 高 8
plt.rcParams['figure.dpi']=100# 分辨率

二、创建图像对象

fig=plt.figure(num=1,figsize=(8,8))
#fig=plt.figure(num,figsize,dpi,facecolor)
`plt.figure(
    num=None,------------------------------------> 图像编号或名称,数字为编号 ,字符串为名称
    figsize=None,--------------------------------> 指定figure的宽和高,单位为英寸;
    dpi=None,------------------------------------> 定绘图对象的分辨率,即每英寸多少个像素,缺省值为72
    facecolor=None,------------------------------> 背景颜色
    edgecolor=None, -----------------------------> 边框颜色
    frameon=True, -------------------------------> 是否显示边框
    **kwargs,
)`

三、绘制多子图

1.add_axes( ) 添加区域

创建Axes区域

ax1=fig.add_axes([
[left, bottom, width, height]
)浮点数列表
fig=plt.figure(num=1,figsize=(8,8))
#fig=plt.figure(num,figsize,dpi,facecolor)
ax1=fig.add_axes([0.01,0.01,0.5,0.5])
x=np.arange(0,5)
y1=x**2
y2=x**3
ax1.set_xticks(range(0,5),rotation=45)
ax1.set_xlabel("x")
ax1.set_ylabel("y1")
ax1.grid()
ax1.plot(x,y1)

ax2=fig.add_axes([0.5,0.5,0.5,0.5])
ax2.set_xticks(range(0,5),rotation=45)
ax2.set_xlabel("x")
ax2.set_ylabel("y2")
ax2.grid()
ax2.plot(x,y2)
plt.show()

2.subplot(行,列,位置,**kwargs)

nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。

例如: subplot(233)表示在当前画布的右上角创建一个两行三列的绘图区域(如下图所示),同时,选择在第 3 个位置绘制子图。

①先创建区域,再画图

②使用 返回值对象绘制图像

ax1=plt.subplot(211)

ax1.set_xlabel()

plt.plot([1,2,3])
#plot(y) x可省 默认x 从 [0,N-1], N为y个数
#现在创建一个子图,它表示一个有1行2列的网格的顶部图。
#因为这个子图将与第一个重叠,所以之前创建的图将被删除
plt.subplot(211)
# x可省略,默认[0,1..,N-1]递增
plt.plot(range(50,70))

plt.subplot(212)

plt.plot(np.arange(12)**2)



# 如果不想覆盖之前的图,需要先创建画布,也就是



# 还可以先设置画布的大小,再通过画布创建区域
fig = plt.figure(figsize=(4,2))

fig.add_subplot(111)

plt.plot(range(20))

fig.add_subplot(221)

plt.plot(range(12))


#现在创建一个子图,它表示一个有2行1列的网格的顶部图。

#--------------- 第一个区域 ax1---------------
ax1 = plt.subplot(211)
# 使用区域对象:
ax1.set_title("ax1")
# x可省略,默认[0,1..,N-1]递增
ax1.plot(range(50,70))

#--------------------第二区域 ax2-----------
ax2 = plt.subplot(212)
ax2.set_title("ax2")

#...其他的自己设置

ax2.plot(np.arange(12)**2)
# 紧凑的布局
plt.tight_layout()
plt.show()

3.subplots()

subplots() 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象
fig , ax = plt.subplots(nrows, ncols)`

- nrows 与 ncols 表示两个整数参数,它们指定子图所占的行数、列

函数的返回值是一个元组,包括一个图形对象和所有的 axes 对象。其中 axes 对象的数量等于 nrows * ncols,且每个 axes 对象均可通过索引值访问(从1开始)
# 创建2行2列的子图,返回图形对象(画布),所有子图的坐标轴
fig, axes =  plt.subplots(2,2)

x = np.arange(1,5)
#绘制平方函数
axes[0][0].plot(x, x*x)
axes[0][0].set_title('square')
#绘制平方根图像
axes[0][1].plot(x, np.sqrt(x))
axes[0][1].set_title('square root')
#绘制指数函数
axes[1][0].plot(x, np.exp(x))
axes[1][0].set_title('exp')

#绘制对数函数
axes[1][1].plot(x,np.log10(x))
axes[1][1].set_title('log')

# 处理标题遮挡
plt.tight_layout()

plt.show()

练习:

一个画布中绘制2个图.一个是正常图,一个是将纵向坐标向有移动一半距离,效果如下
<img src="images/image-20220319185321938.png" width="500px"/>

#%%

fig,axes =  plt.subplots(1,2)
# 设置画布的高和宽, 注意:只为英寸 ,默认分别率为72
fig.set_figheight(3) # 实际高度为 73*3 像素
fig.set_figwidth(8) # 实际宽度为 73*8 像素
# 设置背景:
fig.set_facecolor('gray')
# 分别定义x y
x = np.arange(-50,51)
y = x ** 2

#--------------------绘制图形1 -----------
axes[0].plot(x, y)

# ------------处理图形2的绘制----------------
# 不需要右侧和上侧线条,则可以设置他的颜色
axes[1].spines['right'].set_color("none")
a[1].spines['top'].set_color("none")
# 移动下轴到指定位置
# 在这里,position位置参数有三种,data , outward(向外-可自行尝试) , axes
# axes:0.0 - 1.0之间的值,整个轴上的比例
a[1].spines['left'].set_position(('axes',0.5))

# 移动下轴到指定位置
# 'data'表示按数值挪动,其后数字代表挪动到Y轴的刻度值
a[1].spines['bottom'].set_position(('data',0.0))

a[1].plot(x, y)

4.多次调用subplot() 绘制一个特殊的图像

# 绘制1行2列子图中的第1个子图
plt.subplot(121,facecolor='r')

# 绘制2行2列子图中的第2个子图
plt.subplot(222,facecolor='g')

# 绘制2行2列子图中的第4个子图
plt.subplot(224,facecolor='b')

# 绘制3行2列子图中的第1个子图
plt.subplot(321,facecolor='r')
# 绘制3行2列子图中的第2个子图
plt.subplot(322,facecolor='r')
# 绘制3行2列子图中的第3个子图
plt.subplot(323,facecolor='r')
# 绘制3行2列子图中的第4个子图
plt.subplot(324,facecolor='r')
# # 绘制3行1列子图中的第3个子图
plt.subplot(313,facecolor='b')

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值