Matplotlib库的使用

Matplotlib库由各种可视化类构成,matplotlib.pyplot是绘制各类可视化图形的命令子库,通常约定引入别名:import matplotlib.pyplot as plt

1. plot()函数

plt.plot(x, y, format_string, **kwargs)
参数说明
xX轴数据,列表或者数组,可选
yY轴数据,列表或者数组
format_string控制曲线线型格式的字符串,可选
**kwargs下一组曲线的坐标数据、线型
注意:绘制多条曲线时,各条线的X轴数据不能省略,仅绘制一条曲线时X轴数据可省略

format_string:控制曲线的格式字符串,由颜色字符风格字符标记字符组成

常用颜色字符:

颜色字符说明颜色字符说明
‘b’蓝色 blue‘m’洋红色 magenta
‘g’绿色 green‘y’黄色 yellow
‘r’红色 red‘k’黑色 black
‘c’青绿色 cyan‘w’白色 white

常用风格字符:

风格字符说明
‘-’实线
‘- -’破折线
‘-.’点划线
‘:’虚线
'‘或’ ’无线条

常用标记字符:

标记字符说明标记字符说明标记字符说明
‘.’点标记‘1’下花三角标记‘h’竖六边形标记
‘,’像素点标记‘2’上花三角标记‘H’横六边形标记
‘o’实心圈标记‘3’左花三角标记‘+’十字标记
‘v’倒三角标记‘4’右花三角标记‘x’x标记
‘^’上三角标记‘s’实心方形标记‘D’菱形标记
‘>’右三角标记‘p’实心五角标记‘d’瘦菱形标记
‘<’左三角标记‘*’星形标记‘|’垂直线标记

仅绘制一条线,且省略X轴数据

import matplotlib.pyplot as plt
plt.plot([3, 1, 4, 5, 2])#当plot函数输入的参数只有一个列表时,默认为y轴,而x轴取这个列表的索引值
plt.ylabel("grade")
plt.savefig('test',dpi=600)#将图像存储为文件,默认png格式,dpi为输出质量
plt.show()

在这里插入图片描述
仅绘制一条线,不省略X轴数据

import matplotlib.pyplot as plt
plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])#当plot函数输入的参数有两个列表时,第一个列表为x轴,第二个列表为y轴
plt.ylabel("grade")
plt.axis([-1, 10, 0 ,6])#设置坐标轴范围,前两个值为横轴坐标,后两个值为纵轴坐标
plt.show()

在这里插入图片描述
绘制多条曲线

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(10)
#总共绘制四条线
#第一条线为颜色为绿色、标记字符为实心圈、线型风格为实线
#第二条线为颜色为红色、标记字符为x标记、线型风格未指定所以不画线
#第三条线为颜色未指定默认蓝色、标记字符为星形标记、线型风格未指定所以不画线
#第四条线为颜色为蓝色、标记字符未指定不画出、线型风格为点划线
plt.plot(a, a*1.5, 'go-', a, a*2.5, 'rx', a, a*3.5, '*', a, a*4.5, 'b-.')
plt.savefig('test4',dpi=600)
plt.show()

在这里插入图片描述

2. subplot()函数在一个区域里绘制多个图形

#plt.subplot(nrows, ncols, plot_number)
# nrows子图行数, ncols子图列数, plot_number选择子图位置
plt.subplot(3, 2, 4)#将画布分割成3行2列的六个区域,从左到右从上到下区域编号依次为1——6,每个区域称为一个子图
#plt.subplot(324) = plt.subplot(3, 2, 4)

例子:

import numpy as np
import matplotlib.pyplot as plt

def f(t):
    return np.exp(-t) * np.cos(2*np.pi * t)#能量衰减函数(与绘图函数无关,只是用来计算曲线的纵坐标)

a = np.arange(0.0, 5.0, 0.02)#生成一个随机数组
plt.subplot(211)#将画布划分成2行1列的两个区域,并选择第一个子图
plt.plot(a, f(a))

plt.subplot(2,1,2)#选择子图2
plt.plot(a, np.cos(2*np.pi*a),'r--')#第三个参数'r--'为设置线型为红色 -- 型虚线
plt.show()

在这里插入图片描述

3.pyplot的中文显示

第一种方法:用rcParams修改全局字体实现,即图像中所有文本字符都会被改变属性

import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'#字体设置为黑体
matplotlib.rcParams['font.style'] = 'normal'#字体风格设置为正常
matplotlib.rcParams['font.size'] = 20#字体大小设置为20
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值)")
plt.savefig('test5', dpi=600)
plt.show()

在这里插入图片描述

rcParams的属性

属性说明
‘font.family’字体名称
‘font.style’字体风格,正常’normal’ 或 斜体’italic’
‘font.size’字体大小,整数字号或者’large’、‘x-small’

font.family可选字体

中文字体说明中文字体说明中文字体说明
‘SimHei’中文黑体‘LiSu’中文隶书‘YouYuan’中文幼圆
‘Kaiti’中文楷体‘FangSong’中文仿宋‘STSong’华文宋体

第二种方法:在有中文输出的地方,增加一个属性:fontproperties,仅改变设置了fontproperties的中文属性

import matplotlib.pyplot as plt
import numpy as np
plt.plot([3,1,4,5,2])
plt.ylabel("纵轴(值)", fontproperties='SimHei',fontsize=20)
plt.savefig('test6', dpi=600)
plt.show()

在这里插入图片描述

4.pyplot的文本显示

函数说明
plt.xlabel()对X轴增加文本标签
plt.ylabel()对Y轴增加文本标签
plt.title()对图形整体增加文本标签
plt.text()在任意位置增加文本
plt.annotate()在图形中增加带箭头的注释
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0, 5.0, 0.02)#生成一个随机数组
plt.plot(a, np.cos(2*np.pi*a),'r--')#绘制曲线
plt.xlabel("横轴:时间", fontproperties='SimHei',fontsize=15, color='green')
plt.ylabel("纵轴:振幅", fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontproperties='SimHei',fontsize=20)#设置图标题
plt.text(1, 1, r'$\mu=100$', fontsize=15)#在横坐标为1,纵坐标为1的位置显示$$之间的Latex文本
#增加箭头注释,参数从左到右分别为:文本内容、箭头位置、文本位置、箭头属性字典(颜色、与xy位置的间隙、宽度)
plt.annotate(r'$\mu=100$',xy=(3,1),xytext=(4,1.5),arrowprops=dict(facecolor='black',shrink=0.1,width=2))
plt.axis([-1, 6,-2, 2])#设置坐标轴的范围
plt.grid(True)#显示网格
plt.savefig('text7',dpi=600)#保存图像
plt.show()

在这里插入图片描述

5.pyplot子绘图区域的设计(比subplot更强大的方法)

理念: 设定网格,选中网格,确定选中行列区域数量,编号从0开始
(1)方法一:
函数: plt.subplot2grid(GridSpace, CurSpec, colspan=1, rowspan=1)

参数说明
GridSpace要划分的行数和列数,如数组(3,3)将画布划分成3行3列
CurSpec要选择的区域的行列下标,如数组(0,1)选择第一行第二列(下标从0开始)
colspan从CurSpec位置开始选中的列数,缺省值为1
rowspan从CurSpec位置开始选中的行数,缺省值为1

例如:plt.subplot2grid((3,3), (1,0), colspan=2)生成3行3列的区域,并选中ax2区域,如下图所示:
在这里插入图片描述

plt.subplot2grid((3,3), (0,0), colspan=3)#选择ax1区域
plt.subplot2grid((3,3), (1,2), colspan=1, rowspan=2)#选择ax3区域
plt.subplot2grid((3,3), (2,0))#选择ax4区域
plt.subplot2grid((3,3), (2,1))#选择ax5区域

(2)方法二: 使用gridspec类配合subplot()函数
对于上面那幅图的区域划定和选择方法如下:

import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3,3)

ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[2, 0])
ax5 = plt.subplot(gs[2, 1])

6.16种pyplot的基础绘图函数

函数说明
plt.plot(x, y, fmt, …)绘制一个坐标图
plt.boxplot(data, notch, position)绘制一个箱形图
plt.bar(left, height, width, bottom)绘制一个条形图
plt.barh(width, bottom, left, height)绘制一个横向条形图
plt.polar(theta, r)绘制极坐标图
plt…pie(data,explode)绘制饼图
plt.psd(x, NFFT=256, pad_to, Fs)绘制功率谱密度图
plt.specgram(x, y, NFFT=256, Fs)绘制X-Y的相关性函数
plt.scatter(x, y)绘制散点图
plt.step(x, y, where)绘制步阶图
plt.hist(x, bins, normed)绘制直方图
plt.contour(X, Y, Z, N)绘制等值图
plt.vlines()绘制垂直图
plt.stem(x,y, linefmt, markerfmt)绘制柴火图
plt.plot_date()绘制数据日期

饼图示例:

import matplotlib.pyplot as plt
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'#定义标签
sizes = [15,30,45,10]#设置每个标签占据的百分比,与上面的标签按照顺序对应
explode = (0, 0.1, 0, 0)#设置每个标签扇形区域的突出程度,0为不突出
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=False, startangle=90)
plt.show()

在这里插入图片描述
直方图示例:

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)#设置随机数种子
mu, sigma = 100,20#设置正态分布的均值和标准差
a = np.random.normal(mu,sigma, size=100)#产生100个服从正态分布的数据,存入数组a
#绘制直方图函数,a为数组,30:称为bin,将a等分成30个区间,每个柱体高度表示数组a在此bin上分布的数据的多少
plt.hist(a, 30, histtype='stepfilled', facecolor='b', alpha=0.75)#绘制直方图
plt.title('Histogram')
plt.show()

在这里插入图片描述
极坐标图示例

import numpy as np
import matplotlib.pyplot as plt
N = 20#要绘制的极坐标图中数据的个数
theta = np.linspace(0.0, 2*np.pi, N, endpoint=False)#从0到360度等分出N个不同的角度
radii = 10*np.random.rand(N)#生成每个角度对应的值
width = np.pi / 4*np.random.rand(N)#生成每个角度的宽度值
#面向对象的绘图方法
ax = plt.subplot(111, projection='polar')#设置了绘图区域,第二个参数说明绘制极坐标图
#theta, radii, width分别对应极坐标图中的left,height,width
#left:表示绘制极坐标系中的那些颜色区域的时候从哪开始,表示图中的某一个位置
#height:从中心点向边缘绘制的长度
#width:每个绘图区域的面积
bars = ax.bar(theta, radii, width=width, bottom=0.0)
#给每个扇形区域添加颜色
for r, bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r/10.))
    bar.set_alpha(0.5)

plt.show()

在这里插入图片描述
散点图示例:

import numpy as np
import matplotlib.pyplot as plt

#继续使用面向对象的思想绘图
fig, ax = plt.subplots()
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')
plt.show()

在这里插入图片描述

  • 15
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没伞的行者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值