matplotlib绘制正余弦曲线图的实现


Posted in Python onFebruary 22, 2021

序言:

在python里面,数据可视化是python的一个亮点。在python里面,数据可视可以达到什么样的效果,这当然与我们使用的库有关。python常常需要导入库,并不断调用方法,就很像一条流数据可视化的库,有很多,很多都可以后续开发,然后我们调用。了解过pyecharts美观的可视化界面 ,将pyecharts和matplotlib相对比一下。

pyecharts和matplotlib的区别在哪里呢?Matplotlib是Python数据可视化库的泰斗,尽管已有十多年的历史,但仍然是Python社区中使用最广泛的绘图库,它的设计与MATLAB非常相似,提供了一整套和MATLAB相似的命令API,适合交互式制图,还可以将它作为绘图控件,嵌入其它应用程序中。
Pyecharts是一款将Python与Echarts相结合的数据可视化工具,可以高度灵活的配置,轻松搭配出精美的视图。其中Echarts是百度开源的一个数据可视化库,而Pyecharts将Echarts与Python进行有机对接,方便在Python中直接生成各种美观的图形。

数据可视化之matplotlib绘制正余弦曲线图

我们先来看最终实现效果

matplotlib绘制正余弦曲线图的实现

上面这个图是最终保存的图片查看效果
我们一步一步来实现

1:首先我们需要导入基本的库

matplotlib numpy
matplotlib 是我们本章需要的库
numpy 是我们数据分析处理的常见库,在机器学习时也会经常用到。

一步一步来了
下面展示一些 内联代码片

第一步

#1:用到的方法及参数
# linspace(start, stop, num=50, endpoint=True, 
# retstep=False, dtype=None)
# 相关参数的说明
# 指定在start到stop均分数值
# start:不可省略
# stop:有时包含有时不包含,根据endpoint来选择,默认包含
# num:指定均分的数量,默认为50
# endpoint:布尔值,可选,默认为True。包含stop就True,不包含就# False
# retstep : 布尔值,可选,默认为False。如果为True,返回值和步长
# dtype : 输出数据类型,可选。如果不指定,则根据前面参数的数据类型
# 2:np.plot(x,y.color.lw,label,ls,mk,mec,mfc)
# 其中X由所有输入点坐标的x值组成,Y是由与X中包含的x对应的y所组
# 成的向量
# color 指定线条的颜色
# lw指定线条的宽度
# lw指定线条的样式,默认为实现
# mk可以指定数据标识符
# ms可以指定标识符的大小
# mec可以指定标识符的边界色彩
# mfc标识符内部填充颜色
import matplotlib.pyplot as plt
import numpy as np
#用于正常显示中文标签
plt.rcParams['font.sans-serif']=['SimHei']
# 用于正常显示符号
plt.rcParams['axes.unicode_minus']=False
x = np.linspace(-np.pi,np.pi,256,endpoint = 256)
sin,cos = np.sin(x),np.cos(x)
#绘制,并设置相关的参数,这里标签还不会显示出来,因为还没有
#添加图例,具体往下面看
plt.plot(x,sin,color = 'blue',lw=2.5,label = '正弦sin',mec='red')
plt.plot(x,cos,color = 'red',lw = 2.5,label = '余弦cos()')
plt.show() #显示

matplotlib绘制正余弦曲线图的实现

第二步

#用到的方法及参数
# plt.xlim(xmin, xmax)
# xmin:x轴上的最小值
# xmax:x轴上的最大值
#plt.ylim() 与上一样的道理
#具体如何使用,可以看下面的实例代码
plt.xlim(x.min()*1.5,x.max()*1.5) #将x轴拉伸1.5倍
plt.ylim(cos.min()*1.5,cos.max()*1.5) # 将y轴拉伸1.5倍
plt.show()

matplotlib绘制正余弦曲线图的实现

第三步

#用到的方法与参数
# plt.xticks([],[])
# plt.yticks([],[])
# plt.title('',color,color,..) #设置标题,里面的相关参数可以# 指定
# plt.text(备注内容x轴的坐标,备注内容y轴的坐标 ,'备注内容',fontsize,color,..) #给右下角添加备注

#想说的说这里面有连个参数,分别以列表的形式展示。
现在只需要介绍是用来设置坐标刻度的。其中第二个参数列表
是用来转义的。具体实例如下。

下面展示一些 内联代码片

在x轴的刻度上,我们需要我们需要按照规则的正余弦刻度来,而不是简单的实数,我们需要圆周率。因此在plt.xticks([],[])的第二个列表参数上需要转义。

#这里的r'$代表开始,$代表结尾,\代表转义,\pi代表圆周率的意思,r代表原始字符串。因此可以一一对应下来的。

plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.yticks([-1,0,1])
plt.title("绘图正余弦函数曲线图",fontsize = 16,color ='green')
#给图片右下角添加备注标签
plt.text(+2.2,-1.4,"by:jgdabc",fontsize=16,color = 'purple')
plt.show()

matplotlib绘制正余弦曲线图的实现

第四步:

用到的方法及参数:
plt.gca()#这个方法有点东西。
我要简单的去理解,Python库太繁杂了。有点头大。
plt.gca(),可以获得axes对象
什么又是axes对象?
在matplotlib中,整个图表为一个figure对象。每个figure
对象中可以包含一个或多个axes,而axes为坐标轴。每个axes
对象都是一个拥有自己坐标系统的绘图区域。我们可以理解为通
过这个方法我们可以获得axes对象,而通过这个对象可以帮助我们
方便的操作坐标轴,ok。具体操作看实例吧!

#我相信能看懂英文的不看注释也可以看懂
ax = plt.gca() #获取Axes对象
ax.spines['right'].set_color('none') #隐藏右边界
ax.spines['top'].set_color('none')#隐藏上边界
ax.xaxis.set_ticks_position('bottom') #x轴坐标刻度设置在坐标下面
ax.spines['bottom'].set_position(('data',0))#将x坐标轴平移经过(0,0)的位置
ax.yaxis.set_ticks_position('left')#将y轴坐标刻度设置在坐标轴左侧
ax.spines['left'].set_position(('data',0))#将y轴坐标轴平移到(0,0)位置
plt.show()

兄弟们是不是有点像了,还不够。

matplotlib绘制正余弦曲线图的实现

第五步:

用到的方法及参数:

plt.legend()

添加图例

这样才会把我上述label的内容显示出来。

plt.legend(loc ='upper left',fontsize=12)
plt.show()

matplotlib绘制正余弦曲线图的实现

第六步
注意第六步我们要描点,并画线

用到的方法及参数
plt.plot() # 这个前面已经有说明,不再赘述,这里我们
要加一个参数linewidth指定,将其变为虚线
plt.scatter() #用来绘制两个点的位置
plt.annotate #用来添加注释文字,具体解释我们在实例代码中说明

```javascript
t1 = 2*np.pi/3 #取一个x轴坐标点
t2 = -np.pi # 取第二个坐标点
#根据画线,第一个列表是x轴坐标值,第二个列表是y轴坐标值
plt.plot([t1,t1],[0,np.sin(t1)],color = 'b',linewidth = 1.5,linestyle = '--')
#画线
plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")
#标注两个点的位置(绘制散点图的方法)
plt.scatter([t1,],[np.sin(t1),],50,color = 'b') #50为指定的大小
#为图表添加注释
plt.scatter([t2,],[np.cos(2),],50,color = 'r')
plt.annotate( r'$\sin(\frac{2\pi}{3}=\frac{\sqrt{3}}{2}$)',
       xy = (t1,np.sin(t1)), #点的位置
       xycoords = 'data', #注释文字的偏移量
       xytext = (+10,+30), #文字离点的横纵距离
       textcoords = 'offset points',
       fontsize =14,#注释的大小
       arrowprops = dict(arrowstyle = '->',connectionstyle = 'arc3,rad=.2')#箭头指向的弯曲度


)
plt.annotate(r'$\cos(-\pi)=-1$',
       xy = (t2,np.cos(t2)),
       xycoords = 'data', #注释文字的偏移量
       xytext = (0 ,-40), # 文字离点的横纵距离
       textcoords = 'offset points',
       fontsize = 14,#注释的大小
       arrowprops = dict(arrowstyle = '->',connectionstyle='arc3,rad=.2')

       ) #点的位置

plt.show()

matplotlib绘制正余弦曲线图的实现

第七步:我想设置一下x轴和y轴的字体,一提到轴,就用ax.
我们直接上代码去解释

#遍历获取x轴和y轴的刻度,并设置字体
for label in ax.get_xticklabels() + ax.get_yticklabels() :
  label.set_fontsize(18)
  label.set_bbox(dict(facecolor = 'r',edgecolor='g',alpha=0.5))#alpha代表透明度
#绘制填充区域
plt.fill_between(x,np.abs(x)<0.5,sin,sin>0.5,color='g',alpha =0.8)
plt.fill_between(x,cos,where = (-2.5<x)&(x<-0.5),color = 'purple')
plt.grid() #绘制网格线

plt.savefig("D:\python学习数据可视化matplot学习.png",dpi = 300)保存图片
plt.show()

注意这里保存一定要先保存,后show。

最终效果

matplotlib绘制正余弦曲线图的实现

给大家完整代码

import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x = np.linspace(-np.pi,np.pi,256,endpoint=256)
sin,cos = np.sin(x),np.cos(x)
plt.plot(x,sin,color = 'blue',lw=2.5,label = '正弦sin',mec='red')
plt.plot(x,cos,color = 'red',lw = 2.5,label = '余弦cos()')
plt.xlim(x.min()*1.5,x.max()*1.5)
plt.ylim(cos.min()*1.5,cos.max()*1.5)
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.yticks([-1,0,1])
plt.title("绘图正余弦函数曲线图",fontsize = 16,color ='green')
plt.text(+2.2,-1.4,"by:jgdabc",fontsize=16,color = 'purple')
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
plt.legend(loc ='upper left',fontsize=12)
t1 = 2*np.pi/3
t2 = -np.pi

plt.plot([t1,t1],[0,np.sin(t1)],color = 'b',linewidth = 1.5,linestyle = '--')

plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")

plt.scatter([t1,],[np.sin(t1),],50,color = 'b')

plt.scatter([t2,],[np.cos(2),],50,color = 'r')
plt.annotate( r'$\sin(\frac{2\pi}{3}=\frac{\sqrt{3}}{2}$)',
       xy = (t1,np.sin(t1)),
       xycoords = 'data',
       xytext = (+10,+30),
       textcoords = 'offset points',
       fontsize =14,
       arrowprops = dict(arrowstyle= '->',connectionstyle = 'arc3,rad=.2')#箭头指向的弯曲度


)
plt.annotate(r'$\cos(-\pi)=-1$',
       xy = (t2,np.cos(t2)),
       xycoords = 'data',
       xytext = (0 ,-40),
       textcoords = 'offset points',
       fontsize = 14,
       arrowprops = dict(arrowstyle = '->',connectionstyle='arc3,rad=.2')

       )
for label in ax.get_xticklabels() + ax.get_yticklabels() :
  label.set_fontsize(18)
  label.set_bbox(dict(facecolor = 'r',edgecolor='g',alpha=0.5))

plt.fill_between(x,np.abs(x)<0.5,sin,sin>0.5,color='g',alpha =0.8)
plt.fill_between(x,cos,where = (-2.5<x)&(x<-0.5),color = 'purple')
plt.grid()

plt.savefig("D:\python学习数据可视化matplot学习.png",dpi = 300)
plt.show()

到此这篇关于matplotlib绘制正余弦曲线图的实现的文章就介绍到这了,更多相关matplotlib 正余弦曲线图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python操作xml文件详细介绍
Jun 09 Python
Python中实现常量(Const)功能
Jan 28 Python
python读写LMDB文件的方法
Jul 02 Python
Python小游戏之300行代码实现俄罗斯方块
Jan 04 Python
python elasticsearch环境搭建详解
Sep 02 Python
pandas 缺失值与空值处理的实现方法
Oct 12 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python对接ihuyi实现短信验证码发送
May 10 Python
Python可以实现栈的结构吗
May 27 Python
Selenium python时间控件输入问题解决方案
Jul 22 Python
python 实用工具状态机transitions
Nov 21 Python
python中的装饰器该如何使用
Jun 18 Python
Python使用tkinter制作在线翻译软件
Feb 22 #Python
Python中使用Selenium环境安装的方法步骤
Feb 22 #Python
Python爬虫实例之2021猫眼票房字体加密反爬策略(粗略版)
Feb 22 #Python
python实现计算图形面积
Feb 22 #Python
python实现银行账户系统
Feb 22 #Python
Django实现简单的分页功能
Feb 22 #Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 #Python
You might like
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
php数组中包含中文的排序方法
2014/06/03 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
JS 屏蔽键盘不可用与鼠标右键不可用的方法
2013/11/18 Javascript
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
js实现表单及时验证功能 用户信息立即验证
2016/09/13 Javascript
AngularJS通过$http和服务器通信详解
2016/09/21 Javascript
bootstrap组件之导航组件使用方法
2017/01/19 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
浅谈基于Vue.js的移动组件库cube-ui
2017/12/20 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
10 种最常见的 Javascript 错误(频率最高)
2018/02/08 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
京东优选小程序的实现代码示例
2020/02/25 Javascript
Element实现表格嵌套、多个表格共用一个表头的方法
2020/05/09 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
2020/05/31 Javascript
Python的print用法示例
2014/02/11 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python-for循环的内部机制
2020/06/12 Python
哪种Python框架适合你?简单介绍几种主流Python框架
2020/08/04 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
台湾全方位线上课程与职能学习平台:TibaMe
2019/12/04 全球购物
人力资源管理专业应届生求职信
2013/09/28 职场文书
六个一活动实施方案
2014/03/21 职场文书
公司授权委托书样本
2014/09/15 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL