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,5,6,3,6,3,2,5])
plt.plot(x,marker="*")
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDGbEKs0-1678869664862)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129163515.png)]
fmt参数
fmt参数定义
fmt参数定义了基本的格式,如:标记、线条样式和颜色
fmt = '[marker][line][color]' # 标记、线条、颜色
线类型标记符号
线类型标记 | 描述 |
---|---|
‘-’ | 实线 |
‘:’ | 虚线 |
‘–’ | 破折线 |
‘-.’ | 点划线 |
颜色标记符号
颜色标记 | 描述 |
---|---|
‘r’ | 红色 |
‘g’ | 绿色 |
‘b’ | 蓝色 |
‘c’ | 青色 |
‘m’ | 品红 |
‘y’ | 黄色 |
‘k’ | 黑色 |
实例
给线条变成虚线、坐标点为红色的实心
#给线条变成虚线、坐标点为红色的实心
import matplotlib.pyplot as plt
import numpy as np
y = np.array(3,4,7,3,1)
plt.plot(y,'o:r')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BEx7tokf-1678869664862)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129164829.png)]
自定义标记的大小和颜色
markersize | 简写为 ms | 定义标记的大小。 |
---|---|---|
markerfacecolor | 简写为 mfc | 定义标记内部的颜色。 |
markeredgecolor | 简写为 mec | 定义标记边框的颜色。 |
实例一:大小
import matplotlib.pyplot as plt
import numpy as np
x = np.array([2,3,6,4,6,4])
#ms:标记的大小
plt.plot(x,'o:r',ms=30)
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lH6XDprY-1678869664862)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129165758.png)]
标记二:外边框颜色
import matplotlib.pyplot as plt
import numpy as np
y = np.array([2,4,6,4,7,8])
plt.plot(y,'b',marker='o',ms=30,mec='r')
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ktFtIxCu-1678869664862)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129170445.png)]
实例三:内部颜色
import matplotlib.pyplot as plt
import numpy as np
y = np.array([2,4,6,7,8])
plt.plot(y,marker='o',color='r',ms=30,mfc='w')
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmMnHuqs-1678869664863)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129171138.png)]
Matplotlib的绘图线
绘图过程如果我们自定义线的样式,包括线的类型、颜色和大小等。
线的类型
linestyle:线的参数
线的类型可以使用 linestyle 参数来定义,简写为 ls。
类型 | 简写 | 说明 |
---|---|---|
‘solid’ (默认) | ‘-’ | 实线 |
‘dotted’ | ‘:’ | 点虚线 |
‘dashed’ | ‘–’ | 破折线 |
‘dashdot’ | ‘-.’ | 点划线 |
‘None’ | ‘’ 或 ’ ’ | 不画线 |
实例:虚线
import matplotlib.pyplot as plt
import numpy as np
y = ([2,3,6,4,6])
plt.plot(y,linestyle='dotted')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CPybCxeX-1678869664863)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129173801.png)]
线的颜色
color参数进行定义
线的颜色可以使用 color 参数来定义,简写为 c。
颜色标记 | 描述 |
---|---|
‘r’ | 红色 |
‘g’ | 绿色 |
‘b’ | 蓝色 |
‘c’ | 青色 |
‘m’ | 品红 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
实例:线的颜色
import matplotlib.pyplot as plt
import numpy as np
y = ([2,3,6,4,6])
plt.plot(y,color='r')
#plt.plot(y,c='r')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h9Tkl32G-1678869664863)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129174445.png)]
线的宽度
linewidth参数进行定义
线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等。
实例:线的宽度
import matplotlib.pyplot as plt
import numpy as np
y = ([2,3,6,4,6])
plt.plot(y,linewidth=13)
#plt.plot(y,lw=14)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-17v38eJa-1678869664863)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129175348.png)]
多条线
plot() 方法中可以包含多对 x,y 值来绘制多条线
实例:两条线
import matplotlib.pyplot as plt
import numpy as np
x1 = np.array([2,3,5,7,2])
y1 = np.array([3,6,3,7,3])
x2 = np.array([4,5,7,2,5])
y2 = np.array([3,2,6,3,7])
plt.plot(x1,x2,y1,y2)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NHQt8vWm-1678869664863)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221129180043.png)]
Matplotlib轴标签和标题
轴标签:x/ylabel
plt.xlabel('轴')
plt.ylabel('y轴')
实例:轴标签
import matplotlib.pyplot as plt
import numpy as np
x = np.array([2,4,6,8])
y = np.array([3,6,3,7])
plt.plot(x,y)
#x轴标签
plt.xlabel("x - label")
#y轴标签
plt.ylabel("y - label")
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yvv2qXpD-1678869664864)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221130113225.png)]
标题
title()定义标题
实例:标题
import matplotlib.pyplot as plt
import numpy as np
x = np.array([2,4,6,8])
y = np.array([3,6,3,7])
plt.plot(x,y)
plt.xlabel("x - label")
plt.ylabel("y - label")
#标题
plt.title('坐标轴')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZDiwkdU6-1678869664864)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221130113842.png)]
图形中文显示
Matplotlib 默认情况不支持中文,我们可以使用以下简单的方法来解决。
这里我们使用思源黑体,思源黑体是 Adobe 与 Google 推出的一款开源字体。
官网:https://source.typekit.com/source-han-serif/cn/
GitHub 地址:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese
也可以在网盘下载: https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw,提取码:yxqu。
可以下载个 OTF 字体,比如 SourceHanSansSC-Bold.otf,将该文件文件放在当前执行的代码文件中:
SourceHanSansSC-Bold.otf 文件放在当前执行的代码文件中:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
x = np.arange(1,11)
y = 2 * x + 5
plt.title("菜鸟教程 - 测试", fontproperties=zhfont1)
# fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x,y)
plt.show()
设置中文便利方法
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
标题与标签的定位位置
loc参数使用(位置)
left: | 右边 |
---|---|
right: | 左边 |
center: | 中间 |
bottom: | 底部 |
top: | 上部 |
title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。
ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: ‘bottom’, ‘top’, 和 ‘center’, 默认值为 ‘center’
字体的大小
lsze()参数
Matplotlib网格线
grid:网格线
grid() 方法语法格式如下:
matplotlib.pyplot.grid(b=None, which='major', axis='both', )
参数说明:
- b:可选,默认为 None,可以设置布尔值,true 为显示网格线,false 为不显示,如果设置 **kwargs 参数,则值为 true。
- which:可选,可选值有 ‘major’、‘minor’ 和 ‘both’,默认为 ‘major’,表示应用更改的网格线。
- axis:可选,设置显示哪个方向的网格线,可以是取 ‘both’(默认),‘x’ 或 ‘y’,分别表示两个方向,x 轴方向或 y 轴方向。
- **kwargs:可选,设置网格样式,可以是 color=‘r’, linestyle=‘-’ 和 linewidth=2,分别表示网格线的颜色,样式和宽度。
实例:网格线
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
x = np.array([3,4,6,7,7])
y = np.array([4,5,7,2,4])
#坐标的名字
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x,y)
#grid:网格线
plt.grid()
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2R1BCHVu-1678869664864)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221130203241.png)]
axis参数
设置轴方向的网格线
实例:方向的网格线
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
x = ([2,3,5,7,9,10])
plt.xlabel('x轴')
plt.ylabel('y轴')
plt.plot(x,color='r',maeker="o")
#设置 y 就在轴方向显示网格线
plt.grid(axis='x')
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Uz0CZXS-1678869664864)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221130205208.png)]
参数
颜色
color
‘b’ 蓝色 | ‘m’ 洋红色 | ‘g’ 绿色 |
---|---|---|
‘y’ 黄色 | ‘r’ 红色 | ‘k’ 黑色 |
‘w’ 白色 | ‘c’ 青绿色 | ‘#008000’ RGB 颜色符串 |
linestyle
‘‐’ 实线 | ‘‐‐’ 破折线 |
---|---|
‘‐.’ 点划线 | ‘:’ 虚线 |
linewidth宽度
设置线的宽度,可以设置一个数字
实例:网格线
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
x = np.array([3,4,5,7,8])
y = np.array([4,5,7,8,9])
plt.plot(x,y,linewidth=1.5,linestyle="--",color="g")
plt.grid(color='r',linewidth=1.8,linestyle=":")
plt.title('网格线')
plt.xlabel('x轴')
plt.xlabel('y轴')
plt.show()
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XudI6w1i-1678869666272)(null)]
Matplotlib绘制多图
subplot绘制多图
subplot() 和 subplots()
1、使用 pyplot 中的 subplot() 和 subplots() 方法来绘制多个子图。
2、subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可
subplot(nrows, ncols, index, **kwargs)
subplot(pos, **kwargs)
subplot(**kwargs)
subplot(ax)
以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1…N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
设置 numRows = 1,numCols = 2,就是将图表绘制成 1x2 的图片区域, 对应的坐标为:
(1, 1), (1, 2)
实例
一行两列图
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
#第一个图
x = np.array([3,4,5,6])
#一行两列中的第一个位置
plt.subplot(1,2,1)
plt.plot(x,c='g')
plt.title('第一个图')
#第二个图
y = np.array([1,2,3,4,6,3,4])
#一行两列中的第二个位置
plt.subplot(1,2,2)
plt.title('第二个图')
plt.plot(y,color='r')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9eY4eVG0-1678869664865)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202132657.png)]
suptitle()
多图中的总名称
实例
plotNum = 1, 表示的坐标为(1, 1), 即第一行第一列的子图。
plotNum = 2, 表示的坐标为(1, 2), 即第一行第二列的子图。
plotNum = 3, 表示的坐标为(2, 1), 即第二行第一列的子图。
plotNum = 4, 表示的坐标为(2, 2), 即第二行第二列的子图。
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
#plot 1:
x = np.array([0, 6])
y = np.array([0, 100])
plt.subplot(2, 2, 1)
plt.plot(x,y)
plt.title("plot 1")
#plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(2, 2, 2)
plt.plot(x,y)
plt.title("plot 2")
#plot 3:
x = np.array([1, 2, 3, 4])
y = np.array([3, 5, 7, 9])
plt.subplot(2, 2, 3)
plt.plot(x,y)
plt.title("plot 3")
#plot 4:
x = np.array([1, 2, 3, 4])
y = np.array([4, 5, 6, 7])
plt.subplot(2, 2, 4)
plt.plot(x,y)
plt.title("plot 4")
#所有的总名字
plt.suptitle("RUNOOB subplot Test")
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8LfJdXqG-1678869664865)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202154937.png)]
subplots()
subplots() 方法语法格式如下:
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
参数说明:
- nrows:默认为 1,设置图表的行数。
- ncols:默认为 1,设置图表的列数。
- sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 ‘none’、‘all’、‘row’ 或 ‘col’。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 ‘all’:所有子图共享 x 轴或 y 轴,‘row’ 设置每个子图行共享一个 x 轴或 y 轴,‘col’:设置每个子图列共享一个 x 轴或 y 轴。
- squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N1 或 1N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
- subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
- gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
- **fig_kw:把详细的关键字参数传给 figure() 函数。
实例
import matplotlib.pyplot as plt
import numpy as np
# 创建一些测试数据 -- 图1
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# 创建一个画像和子图 -- 图2
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_title('Simple plot')
# 创建两个子图 -- 图3
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)
# 创建四个子图 -- 图4
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
# 共享 x 轴
plt.subplots(2, 2, sharex='col')
# 共享 y 轴
plt.subplots(2, 2, sharey='row')
# 共享 x 轴和 y 轴
plt.subplots(2, 2, sharex='all', sharey='all')
# 这个也是共享 x 轴和 y 轴
plt.subplots(2, 2, sharex=True, sharey=True)
# 创建标识为 10 的图,已经存在的则删除
fig, ax = plt.subplots(num=10, clear=True)
plt.show()
部分图表显示结果如下:
图1
图2
图3
图4
子图柱状图
基本配置设置
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
# 中文负号
plt.rcParams['axes.unicode_minus'] = False
# 设置分别率 为100
plt.rcParams['figure.dpi'] = 100
# 设置大小
plt.rcParams['figure.figsize'] = (5,3)
.创建图形对象¶
在 Matplotlib 中,面向对象编程的核心思想是创建图形对象(figure object)。通过图形对象来调用其它的方法和属性,这样有助于我们更好地处理多个画布。在这个过程中,pyplot 负责生成图形对象,并通过该对象来添加一个或多个 axes 对象(即绘图区域)。
Matplotlib 提供了matplotlib.figure
图形类模块,它包含了创建图形对象的方法。通过调用 pyplot 模块中 figure() 函数来实例化 figure 对象。
创建图形对象
figure方法如下:
**plt.figure( num=None,------------------------------------> 图像编号或名称,数字为编号 ,字符串为名称 figsize=None,--------------------------------> 指定figure的宽和高,单位为英寸; dpi=None,------------------------------------> 定绘图对象的分辨率,即每英寸多少个像素,缺省值为72 facecolor=None,------------------------------> 背景颜色 edgecolor=None, -----------------------------> 边框颜色 frameon=True, -------------------------------> 是否显示边框 kwargs, )
from matplotlib import pyplot as plt
# 创建图形对象
fig = plt.figure()
# 之前通过配置更改图形的分辨率和宽高. 如今可以再创建图像对象是创建
fig = plt.figure('f1',figsize=(6,4),dpi=30)
plt.plot()
fig = plt.figure('f1',figsize=(4,2),dpi=100)
plt.plot()
x = np.arange(0,50)
y = x ** 2
# 创建图形对象, 图形对象的分辨率为100,背景颜色为:灰色
fig = plt.figure('f1',figsize=(4,2), dpi=100,facecolor='gray')
plt.plot(x,y)
绘制多子图
figure是绘制对象(可理解为一个空白的画布),一个figure对象可以包含多个Axes子图,一个Axes是一个绘图区域,不加设置时,Axes为1,且每次绘图其实都是在figure上的Axes上绘图。
接下来将学习绘制子图的几种方式:
参数
- add_axes() : 添加区域
- subplot() : 均等地划分画布,只是创建一个包含子图区域的画布,(返回区域对象)
- subplots() : 既创建了一个包含子图区域的画布,又创建了一个 figure 图形对象.(返回图形对象和区域对象)
1.add_axes() : 添加区域
Matplotlib 定义了一个 axes 类(轴域类),该类的对象被称为 axes 对象(即轴域对象),它指定了一个有数值范围限制的绘图区域。在一个给定的画布(figure)中可以包含多个 axes 对象,但是同一个 axes 对象只能在一个画布中使用。
2D 绘图区域(axes)包含两个轴(axis)对象
语法:
add_axes(rect)
- 该方法用来生成一个 axes 轴域对象,对象的位置由参数rect决定
- rect 是位置参数,接受一个由 4 个元素组成的浮点数列表,形如 [left, bottom, width, height] ,它表示添加到画布中的矩形区域的左下角坐标(x, y),以及宽度和高度。
如下所示:
fig = plt.figure(figsize=(4,2),facecolor='g')
# ax1从画布起始位置绘制,宽高和画布一致
ax1=fig.add_axes([0,0,1,1])
# ax2 从画布 20% 的位置开始绘制, 宽高是画布的 50%
ax2=fig.add_axes([0.2,0.2,0.5,0.5])
注意:每个元素的值是画布宽度和高度的分数。即将画布的宽、高作为 1 个单位。比如,[ 0.2, 0.2, 0.5, 0.5],它代表着从画布 20% 的位置开始绘制, 宽高是画布的 50%
# 创建绘图对象
fig = plt.figure(figsize=(4,2),facecolor='g')
# 创建x坐标
x = np.arange(0,50,2)
# 创建y坐标
y = x ** 2
# 创建区域1,和画布位置一致
ax1 = fig.add_axes([0.0,0.0,1,1])
# 区域绘制图形
ax1.plot(x,y)
# 创建区域ax2 从画布 40% 的位置开始绘制, 宽高是画布的 50%
ax2=fig.add_axes([0.4,0.4,0.3,0.3])
# 区域2中绘制图形
ax2.plot(x,y)
区域中基本方法的使用
- 区域图表名称: set_title
- 区域中x轴和y轴名称:set_xlabel() set_ylabel()
- 刻度设置: set_xticks()
- 区域图表图例: legend()
# 创建绘图对象
fig = plt.figure(figsize=(4,2),facecolor='g')
# 创建x坐标
x = np.arange(0,50,2)
# 创建y坐标
y = x ** 2
# 创建区域1,和画布位置一致
ax1 = fig.add_axes([0.0,0.0,1,1])
# 设置图表名称
ax1.set_title("axes1")
# x轴名称
ax1.set_xlabel('X axis')
# 设置ax1横轴刻度
ax1.set_xticks(np.arange(0,50,3))
# 区域绘制图形
ax1.plot(x,y,label="ax1")
# 图例
ax1.legend()
# 创建区域ax2 从画布 40% 的位置开始绘制, 宽高是画布的 50%
ax2=fig.add_axes([0.2,0.2,0.4,0.4])
ax2.set_title("axes2")
# 区域2中绘制图形
ax2.plot(x,y,label='ax2')
# 图例,
ax2.legend()
2.subplot() 函数,它可以均等地划分画布
参数格式如下:
ax = plt.subplot(nrows, ncols, index,*args, **kwargs)
- nrows 行
- ncols 列
- index: 位置
- kwargs: title/xlabel/ylabel 等…
也可以直接将几个值写到一起,如:subplot(233)
返回:区域对象
nrows 与 ncols 表示要划分几行几列的子区域(nrows*nclos表示子图数量),index 的初始值为1,用来选定具体的某个子区域。
plot(y) x可省略,默认[0,…,N-1]递增,N为y轴元素的个数.
plt.plot(range(50,70),marker="o")
plt.grid()
# 以上y轴的个数为len(range(50,70)),
# 上面代码y的长度.
y_len = len(range(50,70)) # 长度为20
print([i for i in range(50,70)])
np.linspace(0,y_len-1,y_len)
print(np.linspace(0,11,12))
plt.plot(np.arange(12)**2)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uWsBizfM-1678869664866)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221205121644.png)]
# 默认画布分割为2行1列,当前所在第一个区域
plt.subplot(211)
# x可省略,默认[0,....,N-1]递增,N为y轴元素的个数.
plt.plot(range(50,70),marker="o")
plt.grid()
# 默认画布分割为2行1列,当前所在第二个区域
plt.subplot(212)
plt.plot(np.arange(12)**2)
如果新建的子图与现有的子图重叠,那么重叠部分的子图将会被自动删除,因为它们不可以共享绘图区域。
plt.plot([1,2,3])
#现在创建一个子图,它表示一个有1行2列的网格的顶部图。
#因为这个子图将与第一个重叠,所以之前创建的图将被删除
plt.subplot(211)
# # x可省略,默认[0,1..,N-1]递增
plt.plot(range(50,70))
plt.subplot(212)
plt.plot(np.arange(12)**2)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0GmmYUsd-1678869664867)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221205121958.png)]
如果不想覆盖之前的图,需要先创建画布,也就是
plt.plot([1,2,3,4])
# 还可以先设置画布的大小,再通过画布创建区域
fig = plt.figure(figsize=(4,2))
fig.add_subplot(111) # 分割成1*1 ,当前所在第一个位置
plt.plot(range(20))
fig.add_subplot(221) # 分割成2*2 .当前所在第一个位置
plt.plot(range(12))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kO3F8miC-1678869664867)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221205122016.png)]
设置多图的基本信息方式:
a. 在创建的时候直接设置:
-
对于subplot关键词赋值参数的了解,可以将光标移动到subplot方法上,使用快捷键shift+tab查看具体内容
- #现在创建一个子图,它表示一个有2行1列的网格的顶部图。 plt.subplot(211,title="pic1", xlabel="x axis") # x可省略,默认[0,1..,N-1]递增 plt.plot(range(50,70)) plt.subplot(212, title="pic2", xlabel="x axis") plt.plot(np.arange(12)**2)
发现子图标题重叠,在最后使用plt.tight_layout()
#现在创建一个子图,它表示一个有2行1列的网格的顶部图。
#--------------- 第一个区域---------------
plt.subplot(211,title=“pic1”, xlabel=“x axis”)
Matplotlib散点图
scatter绘制散点图
scatter() 方法语法格式如下:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=N
参数说明:
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 ‘o’。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax::亮度设置,在 norm 参数存在时会忽略。
alpha::透明度设置,0-1 之间,默认 None,即不透明。
linewidths::标记点的长度。
edgecolors::颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’, None。
plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs::其他参数
实例:散点图
import matplotlib.pyplot as plt
import numpy as np
x = np.array([2,3,5,6])
y = np.array([3,6,2,7])
#scatter:声明为散点图
plt.scatter(x,y)
plt.title('散点图')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0wny9N9-1678869664867)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202160628.png)]
图标的大小
s
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
实例
import matplot.pyplot as plt
import numpy as np
x = array([2,3,4,5,5,6,2,4,5,6])
y = array([3,4,5,6,2,6,8,5,8,7])
#默认大小
plt.scatter(s=30,x,y)
#指定的大小
#sizes = np.array([20,50,100,200,500,1000,60,90,50,37])
#plt.scatter(x,y,s=sizes)
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1yQWGv2J-1678869664868)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202161703.png)]
散点图颜色
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
colors =np.array(["red","green","black","orange","purple","beige","cyan","magenta"])
plt.scatter(x, y, c=colors)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WAbw85lH-1678869664868)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202162130.png)]
随机散点图
实例
import numpy as np
import matplotlib.pyplot as plt
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
#随机数生成的种子
np.random.seed(19680801)
n = 50
x = np.random.rand(n)
y = np.random.rand(n)
colors = np.random.rand(n)
area = (30*np.random.rand(n)**2)
#大小、颜色、透明度
plt.scatter(x,y,s=area,c=colors,alpha=0.5)
plt.title('随机散点图')
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mnMVImDd-1678869664868)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202175334.png)]
颜色条Colormap
Matplotlib 模块提供了很多可用的颜色条。
颜色条就像一个颜色列表,其中每种颜色都有一个范围从 0 到 100 的值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JMkpJ3yz-1678869664868)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202175501.png)]
cmap参数
设置颜色条需要使用 cmap 参数,默认值为 ‘viridis’,之后颜色值设置为 0 到 100 的数组
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AnHHijP1-1678869664869)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202175627.png)]
显示颜色条
要显示颜色条,需要使用 plt.colorbar() 方法:
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.colorbar()
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k1BNctEg-1678869664869)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202175748.png)]
换个颜色条参数, cmap 设置为 afmhot_r:
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='afmhot_r')
plt.colorbar()
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GJ77r7ND-1678869664869)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221202175848.png)]
Matplotlib柱状图
bar
使用 pyplot 中的 bar() 方法来绘制柱形图。
bar() 方法语法格式如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
x:浮点型数组,柱形图的 x 轴数据。
height:浮点型数组,柱形图的高度。
width:浮点型数组,柱形图的宽度。
bottom:浮点型数组,底座的 y 坐标,默认 0。
align:柱形图与 x 坐标的对齐方式,‘c6enter’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。
**kwargs::其他参数。
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([32,43,54,23])
y = np.array([12,22,6,18])
plt.bar(x,y,)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kwnbMgjO-1678869664869)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203121242.png)]
barh:垂直柱形图
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([32,43,54,23])
y = np.array([12,22,6,18])
plt.barh(x,y,)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d2GiFvvS-1678869664869)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203121434.png)]
柱形图颜色
color
实例
import matplotlib.pyplot as plt
import numpy as np
x = np.array([2,3,4,5,6,7,8])
y = np.array([7,6,5,4,2,2,1])
plt.bar(x,y,color='r')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zy9y8D1k-1678869664870)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203122031.png)]
自定义各个柱形的颜色:
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
plt.bar(x, y, color = ["#4CAF50","red","hotpink","#556B2F"])
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GdLDplx6-1678869664870)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203122122.png)]
柱形图宽度
bar() 方法使用 width 设置,
barh() 方法使用 height 设置 height
import matplotlib.pyplot as plt
import numpy as np
x = np.array(["Runoob-1", "Runoob-2", "Runoob-3", "C-RUNOOB"])
y = np.array([12, 22, 6, 18])
#bar() 方法使用 width 设置,
plt.bar(x, y, width = 0.1)
#barh() 方法使用 height 设置 height
plt.barh(x, y, height = 0.6)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Yn3UHkt-1678869664870)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203122733.png)]
直方图
参数
参数:
x: 作直方图所要用的数据,必须是一维数组;多维数组可以先进行扁平化再作图;必选参数;
bins: 直方图的柱数,即要分的组数,默认为10;
weights:与x形状相同的权重数组;将x中的每个元素乘以对应权重值再计数;如果normed或density取值为True,则会对权重进行归一化处理。这个参数可用于绘制已合并的数据的直方图;
density:布尔,可选。如果"True",返回元组的第一个元素将会将计数标准化以形成一个概率密度,也就是说,直方图下的面积(或积分)总和为1。这是通过将计数除以数字的数量来实现的观察乘以箱子的宽度而不是除以总数数量的观察。如果叠加也是“真实”的,那么柱状图被规范化为1。(替代normed)
**bottom:**数组,标量值或None;每个柱子底部相对于y=0的位置。如果是标量值,则每个柱子相对于y=0向上/向下的偏移量相同。如果是数组,则根据数组元素取值移动对应的柱子;即直方图上下便宜距离;
histtype:{‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’};'bar’是传统的条形直方图;'barstacked’是堆叠的条形直方图;'step’是未填充的条形直方图,只有外边框;‘stepfilled’是有填充的直方图;当histtype取值为’step’或’stepfilled’,rwidth设置失效,即不能指定柱子之间的间隔,默认连接在一起;
align:{‘left’, ‘mid’, ‘right’};‘left’:柱子的中心位于bins的左边缘;‘mid’:柱子位于bins左右边缘之间;‘right’:柱子的中心位于bins的右边缘;
color:具体颜色,数组(元素为颜色)或None。
label:字符串(序列)或None;有多个数据集时,用label参数做标注区分;
normed: 是否将得到的直方图向量归一化,即显示占比,默认为0,不归一化;不推荐使用,建议改用density参数;
edgecolor: 直方图边框颜色;
alpha: 透明度;
Matplotlib饼图
pie绘制饼图
pie() 方法语法格式如下:
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)[source]
参数说明:
x:浮点型数组,表示每个扇形的面积。
explode:数组,表示各个扇形之间的间隔,默认值为0。
labels:列表,各个扇形的标签,默认值为 None。
colors:数组,表示各个扇形的颜色,默认值为 None。
autopct:设置饼图内各个扇形百分比显示格式,%d%% 整数百分比,%0.1f 一位小数, %0.1f%% 一位小数百分比, %0.2f%% 两位小数百分比。
labeldistance:标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧。
pctdistance::类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6。
shadow::布尔值 True 或 False,设置饼图的阴影,默认为 False,不设置阴影。
radius::设置饼图的半径,默认为 1。
startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5。
textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
饼图
import matplotlib.pyplot as plt
import numpy as np
y = np.array([33,33,55,77])
plt.pie(y)
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6WBHYyrI-1678869664870)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203123631.png)]
颜色和标签
#设置饼图各个扇形的标签与颜色:
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
y = np.array([33,33,55,77])
plt.pie(y,
#标签
labels=['a','拜拜','ds','4'],
#颜色
colors = ['r','g','y','b'])
plt.title('饼型图')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VqaK4UNy-1678869664870)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203124052.png)]
显示第二个扇形,并格式化输出百分比:
实例
#突出显示第二个扇形,并格式化输出百分比:
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
y = np.array([33,33,55,77])
plt.pie(y,
#标签
labels=['a','拜拜','ds','4'],
#颜色
colors = ['r','g','y','b'],
#第二部分突出显示,值越大,距离中心越远
explode = (0.1,0.05,0.2,0.09),
# 格式化输出百分比
autopct = '%.2f%%')
plt.title('饼型图')
plt.show()
如图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NswsDS5i-1678869664871)(D:\Users\32458\Desktop\笔记\Matplotlib\图片\微信截图_20221203124459.png)]
startangle::起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起。
counterclock:布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针。
wedgeprops :字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5。
textprops :字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式。
center :浮点类型的列表,默认值:(0,0)。用于设置图标中心位置。
frame :布尔类型,默认值:False。如果是 True,绘制带有表的轴框架。
rotatelabels :布尔类型,默认为 False。如果为 True,旋转每个 label 到指定的角度。
饼图
import matplotlib.pyplot as plt
import numpy as np
y = np.array([33,33,55,77])
plt.pie(y)
plt.show()
如图
[外链图片转存中…(img-6WBHYyrI-1678869664870)]
颜色和标签
#设置饼图各个扇形的标签与颜色:
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
y = np.array([33,33,55,77])
plt.pie(y,
#标签
labels=['a','拜拜','ds','4'],
#颜色
colors = ['r','g','y','b'])
plt.title('饼型图')
plt.show()
如图
[外链图片转存中…(img-VqaK4UNy-1678869664870)]
显示第二个扇形,并格式化输出百分比:
实例
#突出显示第二个扇形,并格式化输出百分比:
import matplotlib.pyplot as plt
import numpy as np
# 使用中文需要进行配置信息的设置(固定写法)
plt.rcParams['font.sans-serif'] = ["fangsong"]
# 解决方式: 修改轴中的负号编码(固定写法)
plt.rcParams['axes.unicode_minus'] = False
y = np.array([33,33,55,77])
plt.pie(y,
#标签
labels=['a','拜拜','ds','4'],
#颜色
colors = ['r','g','y','b'],
#第二部分突出显示,值越大,距离中心越远
explode = (0.1,0.05,0.2,0.09),
# 格式化输出百分比
autopct = '%.2f%%')
plt.title('饼型图')
plt.show()
如图
[外链图片转存中…(img-NswsDS5i-1678869664871)]