Matplotlib
文章目录
Matplotlib是python的绘图库,让使用者很轻松的将数据进行图形化,并且提供多样的输出格式。
用途
1、用来绘制各种静态、动态、交互式的图表
2、绘制线图、散点图、等高线图、条形图、柱状图、3D图、图形动画
介绍
1、Matplotlib 通常与 NumPy 和 SciPy(Scientific Python)一起使用, 这种组合广泛用于替代 2、MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
3、SciPy 是一个开源的 Python 算法库和数学工具包。
4、SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib安装
#升级python pip
python -m pip install -U pip
#安装matplotlib库
python3 -m pip install -U matplotlib
matplotlib应用
#引用matplitlib库
import matplotlib
#查看matplotlib库的版本号
print(matplotlib.__version__)
Matplotlib Pyplot
1、Pyplot是matplotlib的子库,提供了和MATLAB类似的绘图API
2、Pyplot是常用的绘图模块,可以很方便的进行给用户绘制2D图表
3、Pyplot 包含一系列绘图函数的相关函数,每个函数会对当前的图像进行一些修改,例如:给图像加上标记,生新的图像,在图像中产生新的绘图区域等等。
导入pyplot库
这样我们就可以使用 plt 来引用 Pyplot 包的方法。
import matplotlib.pyplot as plt
plot()语法格式
# 画单条线
plot([x], y, [fmt], *, data=None, **kwargs)
# 画多条线
plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
参数
- x,y:点或者线的节点,x为x轴的数据,y为y轴的数据,数据可以是列表或者数组
- fmt:可选,定义基本格式(颜色、标记和线条样式)
- **kwargs:可选,用在二维平面图上,设置指定属性,如标签,线的宽度
颜色
b | 蓝色 |
---|---|
m | 洋红色 |
g | 绿色 |
y | 黄色 |
r | 红色 |
k | 黑色 |
w | 白色 |
c | 青绿色 |
#008000 | RGB颜色系统 |
线性参数
‘-’:实线 ’-.‘: 点化线 ‘–’: 破折线 ‘:’: 虚线
绘图标记参数
‘.’ 点标记, ‘,’ 像素标记(极小点), ‘o’ 实心圈标记, ‘v’ 倒三角标记,
‘^’ 上三角标记 ‘>’ 右三角标记, ‘<’ 左三角标记
#例子
#'o':是两个点
plt.plot(xpoints,ypoints,'o')
plt.show()
基本方法
方法名 | 说明 |
---|---|
title() | 设置图表的名称 |
xlabel() | 设置x轴名称 |
ylabel() | 设置y轴名称 |
xticks(ticks,label,rotation) | 设置x轴的刻度,rotation旋转角度 |
yticks() | 设置y轴的刻度 |
show() | 显示图表 |
legend() | 显示图例 |
text(x,y,text) | 显示每条数据的值 x,y值的位置 |
实例一
通过两个坐标(0,0)到(0,100)来绘制一条线
import matplotlib.pyplot as plt
import numpy as np
xpoints = np.array([0,6])
ypoints = np.array([0,100])
plt.plot(xpoints,ypoints)
plt.show()
输出结果:
实例二
绘制任意数量的点,只需确保两个轴上的点数相同即可。
绘制一条不规则线,坐标为 (1, 3) 、 (2, 8) 、(6, 1) 、(8, 10),对应的两个数组为:[1, 2, 6, 8] 与 [3, 8, 1, 10]。
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1,2,6,8])
y = np.array([3,6,4,1])
plt.plot(x,y)
plt.show()
输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t4VNekRd-1678869664858)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129161607.png)]
x轴和y轴名称
xlabel() ylabel()
# 创建x为-10到10的整数
x = np.arange(-10,10)
# y是x的平方
y = x ** 2
# 设置标题
plt.title('y=x^2 x取值范围为:[-10,10)')
# 设置x轴名称
plt.xlabel("x 轴")
# 设置y轴名称
plt.ylabel("y 轴")
plt.plot(x, y)
对于上面的图,如果觉得字体偏小或线条太细,可以设置标签文字大小和线条粗细
fontsize参数: 设置文字大小
linewidth参数: 设置线条
# 创建x为-10到10的整数
x = np.arange(-10,10)
# y是x的平方
y = x ** 2
# 设置标题
plt.title('y=x^2 x取值范围为:[-10,10)',fontsize=16)
# 设置x轴名称 ,值不能写"12px"
plt.xlabel("x 轴",fontsize=12)
# 设置y轴名称
plt.ylabel("y 轴")
plt.plot(x, y,linewidth=5)
设置x轴和y轴的刻度
matplotlib.pyplot.xticks(ticks=None, labels=None, **kwargs)
matplotlib.pyplot.yticks(ticks=None, labels=None, **kwargs)
- ticks: 此参数是xtick位置的列表。和一个可选参数。如果将一个空列表作为参数传递,则它将删除所有xticks
- label: 此参数包含放置在给定刻度线位置的标签。它是一个可选参数。,
- **kwargs:**此参数是文本属性,用于控制标签的外观
- **rotation:**旋转角度 如:rotation=45
- color:颜色 如:color=“red”
xticks到底有什么用,其实就是想把坐标轴变成自己想要的样子
实例
# 每个时间点的销量绘图,如果x轴的数据是字符串,会将数据全部展示
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
# 随机出销量
sales =np.random.randint(500,2000,size=len(times))
# 绘制图形
plt.plot(times,sales)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vZNPHF2f-1678869664860)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203154334.png)]
# 如果想只显示部分时间,或者按照某个规则展示,如何处理,这个时候就用到xticks
plt.xticks(range(0,len(times),2))
plt.plot(times,sales)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TUFu54U5-1678869664860)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203154404.png)]
# 时间虽然少了,可不可以让横坐标中的字体倾斜,就可以放下了.
# xticks 第一个参数中元素的值,代表原始数据的索引
plt.xticks(range(0,len(times),2),labels=['日期:%s'%i for i in times], rotation=45, color='red')
plt.plot(times,sales)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rsp4XLYy-1678869664860)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203154439.png)]
图例
legend
图例是集中于地图一角或一侧的地图上各种符号和颜色所代表内容与指标的说明,有助于更好的认识地图。
# 每个时间点的销量绘图
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
# 随机出收入
income =np.random.randint(500,2000,size=len(times))
# 支出
expenses =np.random.randint(300,1500,size=len(times))
# 绘制图形
plt.xticks(range(1,len(times),2),rotation=45)
# 注意,在使用图例前为每个图形设置label参数
plt.plot(times,income,label="收入")
plt.plot(times,expenses,label="支出")
# 默认会使用每个图形的label值作为图例中的说明
plt.legend()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lF95yIvK-1678869664861)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203154825.png)]
图例的图例位置设置
- loc代表了图例在整个坐标轴平面中的位置(一般选取’best’这个参数值)
- 第一种:默认是"best",图例自动‘安家’在一个坐标面内的数据图表最少的位置
- 第二种: loc = ‘XXX’ 分别有0: ‘best’ (自动寻找最好的位置)
位置字符串 | 位置值 | 备注 |
---|---|---|
“best” | 0 | 自动寻找最好的位置 |
“upper right” | 1 | 右上角 |
“upper left” | 2 | 左上角 |
“lower left” | 3 | 左下角 |
“lower right” | 4 | 右下角 |
“right” | 5 | 右边中间 |
“center left” | 6 | 左边中间 |
“center right” | 7 | 右边中间 |
“lower center” | 8 | 中间最下面 |
“upper center” | 9 | 中间最上面 |
“center” | 10 | 正中心 |
显示每条数据的值 x,y值的位置
plt.text(x,y, string, fontsize=15, verticalalignment="top", horizontalalignment="right")
- x,y:表示坐标值上的值
- string:表示说明文字
- fontsize:表示字体大小
- verticalalignment:(va)垂直对齐方式 ,参数:[ ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’ ]
- horizontalalignment:(ha)水平对齐方式 ,参数:[ ‘center’ | ‘right’ | ‘left’ ]
In [87]:
# 每个时间点的销量绘图
times = ['2015/6/26', '2015/8/1', '2015/9/6', '2015/10/12', '2015/11/17','2015/12/23','2016/1/28','2016/3/4','2016/4/9',
'2016/5/15','2016/6/20','2016/7/26','2016/8/31','2016/10/6','2016/11/11','2016/12/17']
# 随机出收入
income =np.random.randint(500,2000,size=len(times))
# 支出
expenses =np.random.randint(300,1500,size=len(times))
# 绘制图形
plt.xticks(range(1,len(times),2),rotation=45)
# 注意,在使用图例前为每个图形设置label参数
plt.plot(times,income,label="收入")
plt.plot(times,expenses,label="支出")
# 默认会使用每个图形的label值作为图例中的说明
plt.legend(loc="upper left")
for x,y in zip(times,income):
plt.text(x,y,'%s万'%y)
#for a,b in zip(times,expenses):
# plt.text(a,b,b)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8QCcvy3-1678869664861)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203155034.png)]
不指定其中一个轴
如果我们不指定 x 轴上的点,则 x 会根据 y 的值来设置为 0, 1, 2, 3…N-1
实例
x 的值默认设置为 [0, 1, 2, 3, 4, 5]
import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([3, 8, 1, 10, 5, 7])
plt.plot(ypoints)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a6iS3WiO-1678869664861)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129162209.png)]
实例:正弦余弦
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0,4*np.pi,0.1) # start,stop,step
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,x,z)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UlINGb1r-1678869664861)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129162336.png)]
Matplotlib绘图标记
marker()
marker参数进行定义
绘图标记符号
“.” | ![]() |
点 |
---|---|---|
“,” | ![]() |
像素点 |
“o” | ![]() |
实心圆 |
“v” | ![]() |
下三角 |
“^” | ![]() |
上三角 |
“<” | ![]() |
左三角 |
“>” | ![]() |
右三角 |
“1” | ![]() |
下三叉 |
“2” | ![]() |
上三叉 |
“3” | ![]() |
左三叉 |
“4” | ![]() |
右三叉 |
“8” | ![]() |
八角形 |
“s” | ![]() |
正方形 |
“p” | ![]() |
五边形 |
“P” | ![]() |
加号(填充) |
“*” | ![]() |
星号 |
“h” | ![]() |
六边形 1 |
“H” | ![]() |
六边形 2 |
“+” | ![]() |
加号 |
“x” | ![]() |
乘号 x |
“X” | ![]() |
乘号 x (填充) |
“D” | ![]() |
菱形 |
“d” | ![]() |
瘦菱形 |
“|” | ![]() |
竖线 |
“_” | ![]() |
横线 |
0 (TICKLEFT) | ![]() |
左横线 |
1 (TICKRIGHT) | ![]() |
右横线 |
2 (TICKUP) | ![]() |
上竖线 |
3 (TICKDOWN) | ![]() |
下竖线 |
4 (CARETLEFT) | ![]() |
左箭头 |
5 (CARETRIGHT) | ![]() |
右箭头 |
6 (CARETUP) | ![]() |
上箭头 |
7 (CARETDOWN) | ![]() |
下箭头 |
8 (CARETLEFTBASE) | ![]() |
左箭头 (中间点为基准) |
9 (CARETRIGHTBASE) | ![]() |
右箭头 (中间点为基准) |
10 (CARETUPBASE) | ![]() |
上箭头 (中间点为基准) |
11 (CARETDOWNBASE) | ![]() |
下箭头 (中间点为基准) |
“None”, " " or “” | 没有任何标记 | |
‘ . . . ... ...’ | ![]() |
渲染指定的字符。例如 “ f f f” 以字母 f 为标记。 |
实例:定义*标记
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1,3,