Python Matplotlib库用法笔记

用于日常学习的积累,如有不足请多多指教。

一、了解Matplotlib库

1 Matplotlib是什么

Matplotlib可以看成是3个缩写单词拼接而成:
·mat(matrix) 矩阵
·plot 绘图
·lib(library)库

Matplotlib 是一个 Python 的二维图表库。

2 Matplotlib的作用

将数据可视化,是数据更加置换

3利用Matplotlib做一个简单的画图

3.1matplotlib.pyplot模块

matplotlib.pyplot模块包含了一系列类似于matlab的画图函数。

import matplotlib.pyplot as plt

3.2画图

import matplotlib.pyplot as plt

plt.figure() #创建画布
plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像
plt.show()	#显示图像

利用Matplotlib做一个简单的画图

4 Matplotlib的三层结构

4.1容器层

  1. 画板层Canvas(位于最底层,一般用户接触不到)
    位于最底层的系统层,充当画板的角色。
  2. 画布层Figure(在Canvas层之上)
    是用户操作的第一层应用层,充当画布的角色。
plt.figure()
  1. 绘图区/坐标系Axes(在Figure层之上)
    应用层的第二层。
plt.subplots()
  1. 相互关系
  • 一个figure可以包含多个axes,一个axes只能属于一个figure。
  • 一个axes(绘图区/坐标系)可以包含多个axis(坐标轴)。

4.2 辅助显示层

辅助显示层为Axes(绘图区)内的除了根据数据绘制出的图像以外的内容,主要包括Axes外观(facecolor)、边框线(spines)、坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)等内容。

4.3图像层

图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。

二、折线图

1 折线图的绘制与显示

  1. 折线图绘制的步骤
    1. 创建画布
    2. 绘制图像
    3. 显示图像
      具体和上面的做一个简单的画图的代码一致:
import matplotlib.pyplot as plt

plt.figure() #创建画布
plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像
plt.show()	#显示图像

利用Matplotlib做一个简单的画图

1.1设置图形的风格

plt.plot(x,y,color='k',linestyle=':') 
#color设置线条颜色
#linestyle设置线条风格

在这里插入图片描述

对上述代码进行修改:

import matplotlib.pyplot as plt

x=[1,2,3,4,5,6]
y=[1,4,9,16,25,36]

plt.figure() #创建画布

plt.plot(x,y,color='k',linestyle=':') #绘制图像

plt.show() #显示图像

结果:
在这里插入图片描述

2 设置画布属性

plt.figure(figsize=(),dpi=)
#figsize:指定图的长宽
#dpi:图像的清晰度

2.1 代码示例

import matplotlib.pyplot as plt

plt.figure(figsize=(5,5),dpi=100) #创建画布
plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像
plt.show()	#显示图像

设置画布属性

3 图片的保存

import matplotlib.pyplot as plt

plt.figure(figsize=(5,5),dpi=100) #创建画布
plt.plot([1, 2, 3, 4, 5, 6], [1, 4, 9, 16, 25, 36]) #绘制图像

plt.savefig("1.png") #保存在相对路径上

plt.show() #显示图像

注意:plt.savefig(path)不能写在plt.show() 之后。(plt.show()会释放figgure的资源,此时在保存图片就是空图片)

4 设置辅助显示层

4.1 自定义x,y刻度

#自定义x轴
plt.xticks(x,tick labels) #刻度标签(tick labels)可以对应替换x
#自定义y轴
plt.yticks(y,tick labels) #刻度标签(tick labels)可以对应替换y
  • 代码示例:
import matplotlib.pyplot as plt

x=[1,2,3,4,5]
y=[1,4,9,16,25]

plt.figure(figsize=(5,5),dpi=100) 
plt.plot(x,y)

plt.xticks(x,["一","二","三","四","五"])

plt.show()

结果:
在这里插入图片描述
注意:默认字体不支持中文,会变成上图的白色框框。

import matplotlib.pyplot as plt

x=[1,2,3,4,5]
y=[1,4,9,16,25]

plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示问题

plt.figure(figsize=(5,5),dpi=100) 
plt.plot(x,y)
plt.xticks(x,["一","二","三","四","五"])

plt.show()

结果:
在这里插入图片描述

4.2 添加网格显示

plt.grid(True,linestyle,alpha)
#linestyle是指线条风格
#alpha是指透明度
  • 代码示例:
import matplotlib.pyplot as plt

x=[1,2,3,4,5]
y=[1,4,9,16,25]

plt.figure(figsize=(5,5),dpi=100) 
plt.plot(x,y)

plt.grid(True,linestyle="--",alpha=0.8)	#添加网格显示

plt.show()

结果:
在这里插入图片描述

4.3添加描述信息

plt.xlabel(str)
plt.ylabel(str)
plt.title(str)
  • 代码示例:
import matplotlib.pyplot as plt

x=[1,2,3,4,5]
y=[1,4,9,16,25]

plt.figure(figsize=(5,5),dpi=100) 
plt.plot(x,y)

plt.xlabel("x")
plt.ylabel("x的平方")
plt.title("x平方的函数图像")
plt.grid(True,linestyle="--",alpha=0.8)

plt.show()

结果:
x平方的函数图像

5 设置图像层

5.1 再添加一条折线

再次使用plt.plot()就可以再添加一条曲线。
其中,可以在plot()中设置对应曲线的标签:

plt.plot(x,y_2x,label='2x') 

并加入以下图像层的代码将其展示出来:

plt.legend()
  • 代码示例:
import matplotlib.pyplot as plt

x=[0,1,2,3,4,5]
y_2x=[2*i for i in range(6)]
y_3x=[3*i for i in range(6)]

#创建画布
plt.figure(figsize=(5,5),dpi=100) 
#绘制图像
plt.plot(x,y_2x,label='2x') 
plt.plot(x,y_3x,label='3x') #再添加一条折线

plt.legend()

plt.show() #显示图像

结果:
在这里插入图片描述

6 多个坐标系显示折线图

figure, axes = plt.subplots(nrows=1, ncols=2)
#nrows:行
#ncols:列

注意:此时为面向对象的编程,注意代码的不同。

  • 代码示例:
import matplotlib.pyplot as plt

x=[0,1,2,3,4,5]
y_2x=[2*i for i in range(6)]
y_3x=[3*i for i in range(6)]

#创建画布
#plt.figure(figsize=(5,5),dpi=100) 
figure, axes = plt.subplots(nrows=1, ncols=2,figsize=(10,5),dpi=100)

#绘制图像
#plt.plot(x,y_2x,label='2x') 
axes[0].plot(x,y_2x,label='2x') 
#plt.plot(x,y_3x,label='3x') 
axes[1].plot(x,y_3x,label='3x') 

#显示图例
#plt.legend()
axes[0].legend()
axes[1].legend()

#修改刻度
axes[0].set_xticks(x[::1])
axes[0].set_yticks(range(0,20)[::2])
axes[1].set_xticks(x[::1])
axes[1].set_yticks(range(0,20)[::2])

#添加描述信息
axes[0].set_xlabel("x")
axes[0].set_ylabel("2x")
axes[0].set_title("y=2x")

axes[1].set_xlabel("x")
axes[1].set_ylabel("3x")
axes[1].set_title("y=3x")

#显示图像
plt.show() 

在这里插入图片描述

三、散点图

分析不同变量之间的关系/规律

plt.scatter(x,y)

3.1散点图的绘制

import matplotlib.pyplot as plt

#数据
math_score=[140,96,134,108,88]
physics_score=[95,78,86,81,72]

#创建画布
plt.figure()

#绘制散点图
plt.scatter(math_score,physics_score)

#显示图像
plt.show()

结果:
在这里插入图片描述

四、柱状图

统计不同类别的数量大小,比较数据之间的差异

plt.bar(x,width,...)
#x为数据
#width为柱宽

4.1一个类别单个柱状图

  • 代码示例:
import matplotlib.pyplot as plt

#数据
students=["小明","小红","小刚","小智","小华"]
math_score=[140,96,134,108,88]

#创建画布
plt.figure()

#绘制图像
plt.bar(range(0,5),math_score,color=['r','y','g','c','b']) #采用不同颜色绘制柱状图

#修改刻度
plt.xticks(range(0,5),students)

#添加标题
plt.title("数学成绩")

#添加网格显示
plt.grid(linestyle=":",alpha=0.5)

#显示图像
plt.show()

结果:
在这里插入图片描述

4.2一个类别多个柱状图

  • 代码示例:
import matplotlib.pyplot as plt

#数据
students=["小明","小红","小刚","小智","小华"]
math_score=[i/150 for i in [140,96,134,108,88]]
physics_score=[i/100 for i in [95,78,86,81,72]]

#创建画布
plt.figure()

#绘制图像
plt.bar(range(0,5),math_score,color='r',width=0.2)
plt.bar([i-0.2 for i in range(0,5)],physics_score,color='b',width=0.2)#注意刻度要作出调整,不然会重叠在一起

#修改刻度
plt.xticks([i-0.1 for i in range(0,5)],students) 

#添加标题
plt.title("数学和物理成绩得分情况")

#添加网格显示
plt.grid(linestyle=":",alpha=0.5)

#显示图像
plt.show()

结果:
在这里插入图片描述

五、直方图

表示数据分布状况

plt.hist(x,bins,density,...)
#x为数据
#bins为组数
#density为是否显示频率(默认不显示)

5.1 直方图与柱状图的区别

直方图柱状图
展示数据的分布比较数据的大小
x轴展示的是数字区间x轴展示的是分类数据
柱子间无间隔柱子间有间隔
柱子宽度有意义

5.2 直方图的绘制

import matplotlib.pyplot as plt

#数据
math_score=[140,96,134,108,138,128,128,117,126,116,100,114,115,116,112,116,101,102,89,96,85,108,92,75,116,92,124,150]

#创建画布
plt.figure(figsize=(20,10),dpi=100)

#绘制图像
d=3
group_num = (max(math_score)-min(math_score))//d #组数=(最大值-最小值)//组距
plt.hist(math_score,bins=group_num,density=True)

#修改刻度
plt.xticks(range(min(math_score),max(math_score)+d,d))

#添加标题
plt.title("数学成绩直方图")

#添加网格显示
plt.grid(linestyle=":",alpha=0.5)

#显示图像
plt.show()

结果:
在这里插入图片描述

六、饼图

不同数据占比情况(类别太多不建议使用)

plt.pie(x,labels,autopct,colors,...)
#x:数量
#labels:每部分的名称
#autopct:占比显示
#colors:每部分颜色

6.1 饼图的绘制

import matplotlib.pyplot as plt

#数据
students=["小明","小红","小刚","小智","小华"]
duty_days=[3,5,8,6,8]

#创建画布
plt.figure()

#绘制图像
plt.pie(duty_days,labels=students,autopct="%1.2f%%",colors=['r','y','c','b','g'])
plt.axis('equal')#保证饼图长宽一致

#显示图例
plt.legend()

#修改刻度
plt.xticks()

#添加标题
plt.title("上月同学值日天数")

#添加网格显示
plt.grid(linestyle=":",alpha=0.5)

#显示图像
plt.show()

结果:
饼图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fqlll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值