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使用PyV8执行javascript代码示例分享
Dec 04 Python
跟老齐学Python之从格式化表达式到方法
Sep 28 Python
Python 读取指定文件夹下的所有图像方法
Apr 27 Python
解决python写入mysql中datetime类型遇到的问题
Jun 21 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
关于Python3 lambda函数的深入浅出
Nov 27 Python
keras中epoch,batch,loss,val_loss用法说明
Jul 02 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
Python通过len函数返回对象长度
Oct 22 Python
python小技巧——将变量保存在本地及读取
Nov 13 Python
Python爬虫进阶之Beautiful Soup库详解
Apr 29 Python
Python如何解决secure_filename对中文不支持问题
Jul 16 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
php操作access数据库的方法详解
2017/02/22 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
php更新cookie内容的详细方法
2019/09/30 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
查看图片(前进后退)功能实现js代码
2013/04/24 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
js实现选中复选框文字变色的方法
2015/08/14 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
JavaScript函数apply()和call()用法与异同分析
2018/08/10 Javascript
angularjs的单选框+ng-repeat的实现方法
2018/09/12 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
python查看FTP是否能连接成功的方法
2015/07/30 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Python实现GIF图倒放
2020/07/16 Python
如何在python中实现线性回归
2020/08/10 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
Tiqets荷兰:出售欧洲最美丽的景点和博物馆门票
2018/01/09 全球购物
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
本科生的职业生涯规划范文
2014/01/09 职场文书
行政内勤岗位职责
2014/04/07 职场文书
就业协议书
2014/09/12 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
基于Golang 高并发问题的解决方案
2021/05/08 Golang
手残删除python之后的补救方法
2021/06/26 Python
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis