python绘制相频特性曲线_数据分析之Matplotlib和机器学习基
础
⼀、Matplotlib基础知识
Matplotlib 是⼀个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境⽣成出版质量级别的图形。
通过 Matplotlib,开发者可以仅需要⼏⾏代码,便可以⽣成绘图,直⽅图,功率谱,条形图,错误图,散点图等
它可与 NumPy ⼀起使⽤,提供了⼀种有效的 MatLab 开源替代⽅案。 它也可以和图形⼯具包⼀起使⽤,如 PyQt 和 wxPython。
1.Matplotlib中的基本图表包括的元素
x轴和y轴 axis
⽔平和垂直的轴线
x轴和y轴刻度 tick
刻度标⽰坐标轴的分隔,包括最⼩刻度和最⼤刻度
x轴和y轴刻度标签 tick label
表⽰特定坐标轴的值
绘图区域(坐标系) axes
实际绘图的区域
坐标系标题 title
实际绘图的区域
轴标签 xlabel ylabel
实际绘图的区域
2.hold属性
hold属性默认为True,允许在⼀幅图中绘制多个曲线;将hold属性修改为False,每⼀个plot都会覆盖前⾯的plot。
但是⽬前不推荐去动hold这个属性,这种做法(会有警告)。因此使⽤默认设置即可。
3.⽹格线
grid⽅法
使⽤grid⽅法为图添加⽹格线
设置grid参数(参数与plot函数相同)
.lw代表linewidth,线的粗细
.alpha表⽰线的明暗程度
4.axis⽅法
如果axis⽅法没有任何参数,则返回当前坐标轴的上下限
5.xlim⽅法和ylim⽅法
除了plt.axis⽅法,还可以通过xlim,ylim⽅法设置坐标轴范围
6.legend⽅法
两种传参⽅法:
【推荐使⽤】在plot函数中增加label参数
在legend⽅法中传⼊字符串列表
7.导⼊
importnumpy as npimportpandas as pdimportmatplotlib.pyplot as pltfrom pandas importSeries,DataFrame%matplotlib inline"""%matplotlib作⽤:
1.是在使⽤jupyter notebook 或者 jupyter qtconsole的时候,才会经常⽤到%matplotlib,也就是说那⼀份代码可能就是别⼈使⽤jupyter notebook 或者 jupyter qtconsole进⾏编辑的。
2.⽽%matplotlib具体作⽤是当你调⽤matplotlib.pyplot的绘图函数plot()进⾏绘图的时候,或者⽣成⼀个figure画布的时候,可以直接在你的python console⾥⾯⽣成图像。
3.⽽我们在spyder或者pycharm实际运⾏代码的时候,可以直接注释掉这⼀句,也是可以运⾏成功的"""
1、包含单条曲线的图
注意:y,x轴的值必须为数字
"""plot() 函数绘制图形。
show()函数显⽰图形。"""
#1.绘制线性直线#y = 2*x
x=[1,2,3,4,5]
y=[2,4,6,8,10]
plt.plot(x,y)
plt.show()#结果
#y = 2x + 5
x = np.arange(1,11) #x的值
y = 2 * x + 5 #y的值
plt.title("Matplotlib demo") #图的标题
plt.xlabel("x axis caption") #x轴的名称
plt.ylabel("y axis caption") #y轴的名称
plt.plot(x,y) #画图
plt.show() #显⽰#结果
#2.绘制抛物线
x = np.arange(-np.pi,np.pi,0.5) #np.pi就是数学中的π:
y = x**2plt.plot(x,y)
plt.show()#结果
#3.绘制正弦曲线图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True) #从 −π 到 +π 等间隔的 256 个值
y = np.sin(x) #y是这256个值对应的正弦函数值组成的numpy数组,同理绘制余弦y = np.cos(x) plt.plot(x,y)
plt.show()#结果
2、包含多个曲线的图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)#1.连续调⽤多次plot函数
plt.plot(x,y)
plt.plot(x+2,y+2)
plt.show()#结果
#2.也可以在⼀个plot函数中传⼊多对X,Y值,在⼀个图中绘制多个曲线
plt.plot(x,y,x+3,y+3)
plt.show()#结果
3、将多个曲线图绘制在⼀个table区域中:对象形式创建表图
a=plt.subplot(row,col,loc) 创建曲线图
a.plot(x,y) 绘制曲线图
#⼀个区域中绘制2⾏2列,共4个图形#第⼀幅图:线形图
x = np.arange(0,10,5)
y= 2*x
ax1= plt.subplot(2,2,1) #2⾏2列这个区域块的第⼀个位置
ax1.plot(x,y)#绘图
#第⼆幅图:正弦图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)
ax2= plt.subplot(222) #2⾏2列这个区域块的第⼆个位置
ax2.plot(x,y) #绘图
#第三幅图:余弦图
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
s(x)
ax3= plt.subplot(223) #2⾏2列这个区域块的第三个位置
ax3.plot(x,y) #绘图
#第四幅图:抛物线
y= x**2ax4= plt.subplot(224) #2⾏2列这个区域块的第四个位置
ax4.plot(x,y) #绘图
#结果
4、⽹格线
参数:
- axis
- color:⽀持⼗六进制颜⾊
- linestyle: -- -. :
- alpha
"""⽹格线 ide(XXX)
grid()常⽤参数:
b : 布尔值。就是是否显⽰⽹格线的意思。官⽹说如果b设置为None, 且kwargs长度为0,则切换⽹格状态。
matplotlib中subplotwhich : 取值为'major', 'minor', 'both'。 默认为'major'。
axis : 取值为‘both’, ‘x’,‘y’。就是想绘制哪个⽅向的⽹格线。不过我在输⼊参数的时候发现如果输⼊x或y的时候,输⼊的是哪条轴,则会隐藏哪条轴
color : 这就不⽤多说了,就是设置⽹格线的颜⾊。或者直接⽤c来代替color也可以。c=r 红⾊, c=g 绿⾊ 等等
linestyle :也可以⽤ls来代替linestyle, 设置⽹格线的风格,是连续实线,虚线或者其它不同的线条。 | '-' | '--' | '-.' | ':' | 'None' | ' ' | '']
linewidth : 设置⽹格线的宽度"""
#1.绘制⼀个正弦曲线图,并设置⽹格
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
y=np.sin(x)
plt.plot(x,y)#结果
#2.绘制⼀个两⾏两列的曲线图阵,并设置⽹格
x=np.linspace(-np.pi,np.pi,100)
y=np.sin(x)
a1=plt.subplot(221)
a1.plot(x,y)
a2=plt.subplot(222)
a2.plot(x,y)
a3=plt.subplot(223)
a3.plot(x,y)
a4=plt.subplot(224)
a4.plot(x,y)#结果
5、图形中⽂显⽰
Matplotlib 默认情况不⽀持中⽂,我们可以使⽤以下简单的⽅法来解决:
importnumpy as npfrom matplotlib importpyplot as pltimportmatplotlib#fname 为 你下载的字体库路径,注意 f 字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="f")
x= np.arange(1,11)
y= 2 * x + 5plt.title("中⽂字体 - 测试", fontproperties=zhfont1)#fontproperties 设置中⽂显⽰,fontsize 设置字体⼤⼩
plt.xlabel("x 轴", fontproperties=zhfont1)
plt.ylabel("y 轴", fontproperties=zhfont1)
plt.plot(x,y)
plt.show()#结果
此外,我们还可以使⽤系统的字体
from matplotlib importpyplot as pltimportmatplotlib
a=sorted([f.name for f inmatplotlib.font_flist])for i ina:print(i)
打印出你的 font_manager 的 ttflist 中所有注册的名字,⼀个看中⽂字体例如:STFangsong(仿宋),然后添加以下代码即可
6、向 plot() 函数添加格式字符串来显⽰离散值
作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显⽰离散值。 可以使⽤以下格式化字符。
字符描述
'-'
实线样式
'--'
短横线样式
'-.'
点划线样式
':'
虚线样式
'.'
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论