Matplotlib Python 画图工具包教程学习笔记3 柱状图和子图


1.柱状图

1.1 plt.bar

柱状图主要使用plt.bar函数,与其他函数相类似,这个函数也是采用横纵坐标相结合的方式,传进去的第一个参数为横坐标,第二个参数为纵坐标(在图中显示为纵坐标的宽度)

  • facecolor:设置柱状图的颜色
  • edgecolor:设置柱状图边框的颜色

1.2 测试样例

# -*- coding:utf-8 -8-
"""
Author: Leung
Date: 2021--08--23
"""

import matplotlib.pyplot as plt
import numpy as np

n = 12
X = np.arange(n)
Y1 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n))*np.random.uniform(0.5,1.0,n)

#画柱状图
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor = 'white')#向上
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor = 'white')#向下

for x,y in zip(X,Y1):
    # ha : horizontal alignment 水平对齐
    plt.text(x,y+0.05,'%.2f'%y,ha = 'center',va = 'bottom')

#注意这里的Y要取相反数向下
for x,y in zip(X,Y2):
    # ha : horizontal alignment 水平对齐
    plt.text(x,-y-0.05,'-%.2f'%y,ha = 'center',va = 'top')


plt.xlim(-.5,n)
plt.xticks(())

plt.ylim(-1.25,1.25)
plt.yticks(())

plt.show()

1.3 测试结果

6


2. 绘制子图

子图的绘制是指在原始的图像中分开多个部分,在每个部分中都有自己的一个图像

2.1 方法一:三点定位

在plt.subplot中传进去3个参数,即可定位子图

2.1.1 测试代码

# -*- coding:utf-8 -8-
"""
Author: FeverTwice
Date: 2021--08--23
"""

import matplotlib.pyplot as plt
import numpy as np

plt.figure()

# #分成两行两列以后我在第一个位置上画东西
# plt.subplot(2,2,1)
# plt.plot([0,1],[0,1])
#
# #第2个位置上画东西
# plt.subplot(2,2,2)
# plt.plot([0,1],[0,2])
#
# plt.subplot(2,2,3)
# plt.plot([0,1],[0,3])
#
# plt.subplot(2,2,4)
# plt.plot([0,1],[0,4])

#分成两行以后我直接在第一列上画东西
plt.subplot(2,1,1)
plt.plot([0,1],[0,1])

#第2个位置上画东西
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])

plt.subplot(2,3,5)
plt.plot([0,1],[0,3])

plt.subplot(2,3,6)
plt.plot([0,1],[0,4])

plt.show()

2.1.2 测试结果

7


2.2 方法二:subplot2grid

#第一个参数:整个grid有3行3列,从0,0开始,且列跨度为3,行跨度为1
ax1 = plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)

注意,使用这种方法之后,以前控制图片属性的句柄前面要加上set_
如:
ax1.title() —> ax1.set_title()

2.2.1 测试效果

8


2.3方法三:gridspec

主要使用二维数组索引的方式来对子图的位置进行相应的定位

gs = gridspec.GridSpec(3,3)

#使用索引的方式
ax1 = plt.subplot(gs[0,:])

9


2.4 方法四:subplots (注意这里比subplot结尾多了s)

这个方法主要通过在subplot函数对母图进行分割的基础上,设置横纵坐标需不需要合并的方法来实现的

f,((ax11,ax12),(ax21,ax22))=plt.subplots(2,2,sharex=True)   #我们要不要共享X或者Y轴

10


2.5 测试源代码

# -*- coding:utf-8 -8-
"""
Author: FeverTwice
Date: 2021--08--23
"""

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec

# method 1: subplot2grid
################################

plt.figure(1)
#第一个参数:整个grid有3行3列,从0,0开始,且列跨度为3,行跨度为1
ax1 = plt.subplot2grid((3,3),(0,0),colspan=3,rowspan=1)
ax1.plot([1,2],[1,2])
ax1.set_title('ax1') #以前的点全部变成set

ax2 = plt.subplot2grid((3,3),(1,0),colspan=2)
ax2.plot([1,2],[3,2])
ax2.set_title('ax2') #以前的点全部变成set

ax3 = plt.subplot2grid((3,3),(1,2),rowspan=2)

ax4 = plt.subplot2grid((3,3),(2,0))

ax5 = plt.subplot2grid((3,3),(2,1))

# method 2: gridspec
################################
plt.figure(2)
gs = gridspec.GridSpec(3,3)

#使用索引的方式
ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,:2])
ax3 = plt.subplot(gs[1:,2])
ax4 = plt.subplot(gs[-1,0])
ax5 = plt.subplot(gs[-1,-2])

# method 3: subplots // easy to define structure
################################

f,((ax11,ax12),(ax21,ax22))=plt.subplots(2,2,sharex=True)   #我们要不要共享X或者Y轴
ax11.scatter([1,2],[1,2])

plt.tight_layout()
plt.show()

写在最后

本文章为【莫烦Python】Matplotlib Python 画图教程课程对应的一些课堂笔记,并参考了Matplotlib的开发者文档,仅为各位同志学习参考之用

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值