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 django事务transaction源码分析详解
Mar 17 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
Python实现的弹球小游戏示例
Aug 01 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
对python中数组的del,remove,pop区别详解
Nov 07 Python
Python中的 enum 模块源码详析
Jan 09 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
Python如何实现动态数组
Nov 02 Python
Python classmethod装饰器原理及用法解析
Oct 17 Python
python中watchdog文件监控与检测上传功能
Oct 30 Python
解决pytorch-gpu 安装失败的记录
May 24 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
php4的session功能评述(二)
2006/10/09 PHP
php需登录的文件上传管理系统
2020/03/21 PHP
PHP数据库操作四:mongodb用法分析
2017/08/16 PHP
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
JQuery团队打造的javascript单元测试工具QUnit介绍
2010/02/26 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jQuery插件实现适用于移动端的地址选择器
2016/02/18 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
[04:41]2014DOTA2国际邀请赛 Liquid顺利突围晋级正赛
2014/07/09 DOTA
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[53:29]完美世界DOTA2联赛循环赛 DM vs Matador BO2第二场 11.04
2020/11/05 DOTA
初学Python函数的笔记整理
2015/04/07 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python删除某个字符
2018/03/19 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
2018/11/29 Python
简单了解python数组的基本操作
2019/11/26 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
PHP如何与mysql建立链接
2013/05/05 面试题
法律专业个人实习自我鉴定
2013/09/23 职场文书
中央空调节能方案
2014/06/15 职场文书
2014镇党委班子对照检查材料思想汇报
2014/09/23 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
2014年企业工会工作总结
2014/11/12 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL