• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
丽人至上再 显示全部楼层 发表于 2021-10-25 19:34:16 |阅读模式 打印 上一主题 下一主题
序言:

在python里面,数据可视化是python的一个亮点。在python里面,数据可视可以达到什么样的效果,这固然与我们利用的库有关。python常常需要导入库,并不绝调用方法,就很像一条流数据可视化的库,有许多,许多都可以后续开发,然后我们调用。了解过pyecharts美观的可视化界面 ,将pyecharts和matplotlib相对比一下。
pyecharts和matplotlib的区别在那里呢?Matplotlib是Python数据可视化库的泰斗,尽管已有十多年的汗青,但仍然是Python社区中利用最广泛的画图库,它的计划与MATLAB非常相似,提供了一整套和MATLAB相似的下令API,得当交互式制图,还可以将它作为画图控件,嵌入别的应用程序中。
Pyecharts是一款将Python与Echarts相结合的数据可视化工具,可以高度机动的设置,轻松搭配出精致的视图。此中Echarts是百度开源的一个数据可视化库,而Pyecharts将Echarts与Python举行有机对接,方便在Python中直接天生各种美观的图形。
数据可视化之matplotlib绘制正余弦曲线图

我们先来看最终实现效果



上面这个图是最终生存的图片检察效果
我们一步一步来实现

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


matplotlib numpy
matplotlib 是我们本章需要的库
numpy 是我们数据分析处理处罚的常见库,在呆板学习时也会常常用到。
一步一步来了
下面展示一些
  1. 内联代码片
复制代码

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


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


第三步
  1. #用到的方法与参数
  2. # plt.xticks([],[])
  3. # plt.yticks([],[])
  4. # plt.title('',color,color,..) #设置标题,里面的相关参数可以# 指定
  5. # plt.text(备注内容x轴的坐标,备注内容y轴的坐标 ,'备注内容',fontsize,color,..) #给右下角添加备注
  6. #想说的说这里面有连个参数,分别以列表的形式展示。
  7. 现在只需要介绍是用来设置坐标刻度的。其中第二个参数列表
  8. 是用来转义的。具体实例如下。
复制代码
下面展示一些
  1. 内联代码片
复制代码

在x轴的刻度上,我们需要我们需要按照规则的正余弦刻度来,而不是简朴的实数,我们需要圆周率。因此在plt.xticks([],[])的第二个列表参数上需要转义。
#这里的r'$代表开始,$代表末端,\代表转义,\pi代表圆周率的意思,r代表原始字符串。因此可以逐一对应下来的。
  1. plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],
  2. [r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
  3. plt.yticks([-1,0,1])
  4. plt.title("绘图正余弦函数曲线图",fontsize = 16,color ='green')
  5. #给图片右下角添加备注标签
  6. plt.text(+2.2,-1.4,"by:jgdabc",fontsize=16,color = 'purple')
  7. plt.show()
复制代码


第四步:

用到的方法及参数:
plt.gca()#这个方法有点东西。
我要简朴的去明确,Python库太繁杂了。有颔首大。
plt.gca(),可以得到axes对象
什么又是axes对象?
在matplotlib中,整个图表为一个figure对象。每个figure
对象中可以包含一个或多个axes,而axes为坐标轴。每个axes
对象都是一个拥有本身坐标体系的画图地区。我们可以明确为通
过这个方法我们可以得到axes对象,而通过这个对象可以帮助我们
方便的利用坐标轴,ok。具体利用看实例吧!
  1. #我相信能看懂英文的不看注释也可以看懂
  2. ax = plt.gca() #获取Axes对象
  3. ax.spines['right'].set_color('none') #隐藏右边界
  4. ax.spines['top'].set_color('none')#隐藏上边界
  5. ax.xaxis.set_ticks_position('bottom') #x轴坐标刻度设置在坐标下面
  6. ax.spines['bottom'].set_position(('data',0))#将x坐标轴平移经过(0,0)的位置
  7. ax.yaxis.set_ticks_position('left')#将y轴坐标刻度设置在坐标轴左侧
  8. ax.spines['left'].set_position(('data',0))#将y轴坐标轴平移到(0,0)位置
  9. plt.show()
复制代码
兄弟们是不是有点像了,还不敷。



第五步:
用到的方法及参数:
plt.legend()
添加图例
这样才会把我上述label的内容表现出来。
  1. plt.legend(loc ='upper left',fontsize=12)
  2. plt.show()
复制代码

第六步
注意第六步我们要描点,并画线
  1. 用到的方法及参数
  2. plt.plot() # 这个前面已经有说明,不再赘述,这里我们
  3. 要加一个参数linewidth指定,将其变为虚线
  4. plt.scatter() #用来绘制两个点的位置
  5. plt.annotate #用来添加注释文字,具体解释我们在实例代码中说明
  6. ```javascript
  7. t1 = 2*np.pi/3 #取一个x轴坐标点
  8. t2 = -np.pi # 取第二个坐标点
  9. #根据画线,第一个列表是x轴坐标值,第二个列表是y轴坐标值
  10. plt.plot([t1,t1],[0,np.sin(t1)],color = 'b',linewidth = 1.5,linestyle = '--')
  11. #画线
  12. plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")
  13. #标注两个点的位置(绘制散点图的方法)
  14. plt.scatter([t1,],[np.sin(t1),],50,color = 'b') #50为指定的大小
  15. #为图表添加注释
  16. plt.scatter([t2,],[np.cos(2),],50,color = 'r')
  17. plt.annotate( r'$\sin(\frac{2\pi}{3}=\frac{\sqrt{3}}{2}$)',
  18.        xy = (t1,np.sin(t1)), #点的位置
  19.        xycoords = 'data', #注释文字的偏移量
  20.        xytext = (+10,+30), #文字离点的横纵距离
  21.        textcoords = 'offset points',
  22.        fontsize =14,#注释的大小
  23.        arrowprops = dict(arrowstyle = '->',connectionstyle = 'arc3,rad=.2')#箭头指向的弯曲度
  24. )
  25. plt.annotate(r'$\cos(-\pi)=-1$',
  26.        xy = (t2,np.cos(t2)),
  27.        xycoords = 'data', #注释文字的偏移量
  28.        xytext = (0 ,-40), # 文字离点的横纵距离
  29.        textcoords = 'offset points',
  30.        fontsize = 14,#注释的大小
  31.        arrowprops = dict(arrowstyle = '->',connectionstyle='arc3,rad=.2')
  32.        ) #点的位置
  33. plt.show()
复制代码


第七步:我想设置一下x轴和y轴的字体,一提到轴,就用ax.
我们直接上代码去表明
  1. #遍历获取x轴和y轴的刻度,并设置字体
  2. for label in ax.get_xticklabels() + ax.get_yticklabels() :
  3.   label.set_fontsize(18)
  4.   label.set_bbox(dict(facecolor = 'r',edgecolor='g',alpha=0.5))#alpha代表透明度
  5. #绘制填充区域
  6. plt.fill_between(x,np.abs(x)<0.5,sin,sin>0.5,color='g',alpha =0.8)
  7. plt.fill_between(x,cos,where = (-2.5<x)&(x<-0.5),color = 'purple')
  8. plt.grid() #绘制网格线
  9. plt.savefig("D:\python学习数据可视化matplot学习.png",dpi = 300)保存图片
  10. plt.show()
复制代码
注意这里生存一定要先生存,后show。
最终效果



给大家完整代码
  1. import matplotlib.pyplot as plt
  2. import numpy as np
  3. plt.rcParams['font.sans-serif']=['SimHei']
  4. plt.rcParams['axes.unicode_minus']=False
  5. x = np.linspace(-np.pi,np.pi,256,endpoint=256)
  6. sin,cos = np.sin(x),np.cos(x)
  7. plt.plot(x,sin,color = 'blue',lw=2.5,label = '正弦sin',mec='red')
  8. plt.plot(x,cos,color = 'red',lw = 2.5,label = '余弦cos()')
  9. plt.xlim(x.min()*1.5,x.max()*1.5)
  10. plt.ylim(cos.min()*1.5,cos.max()*1.5)
  11. 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$'])
  12. plt.yticks([-1,0,1])
  13. plt.title("绘图正余弦函数曲线图",fontsize = 16,color ='green')
  14. plt.text(+2.2,-1.4,"by:jgdabc",fontsize=16,color = 'purple')
  15. ax = plt.gca()
  16. ax.spines['right'].set_color('none')
  17. ax.spines['top'].set_color('none')
  18. ax.xaxis.set_ticks_position('bottom')
  19. ax.spines['bottom'].set_position(('data',0))
  20. ax.yaxis.set_ticks_position('left')
  21. ax.spines['left'].set_position(('data',0))
  22. plt.legend(loc ='upper left',fontsize=12)
  23. t1 = 2*np.pi/3
  24. t2 = -np.pi
  25. plt.plot([t1,t1],[0,np.sin(t1)],color = 'b',linewidth = 1.5,linestyle = '--')
  26. plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")
  27. plt.scatter([t1,],[np.sin(t1),],50,color = 'b')
  28. plt.scatter([t2,],[np.cos(2),],50,color = 'r')
  29. plt.annotate( r'$\sin(\frac{2\pi}{3}=\frac{\sqrt{3}}{2}$)',
  30.        xy = (t1,np.sin(t1)),
  31.        xycoords = 'data',
  32.        xytext = (+10,+30),
  33.        textcoords = 'offset points',
  34.        fontsize =14,
  35.        arrowprops = dict(arrowstyle= '->',connectionstyle = 'arc3,rad=.2')#箭头指向的弯曲度
  36. )
  37. plt.annotate(r'$\cos(-\pi)=-1$',
  38.        xy = (t2,np.cos(t2)),
  39.        xycoords = 'data',
  40.        xytext = (0 ,-40),
  41.        textcoords = 'offset points',
  42.        fontsize = 14,
  43.        arrowprops = dict(arrowstyle = '->',connectionstyle='arc3,rad=.2')
  44.        )
  45. for label in ax.get_xticklabels() + ax.get_yticklabels() :
  46.   label.set_fontsize(18)
  47.   label.set_bbox(dict(facecolor = 'r',edgecolor='g',alpha=0.5))
  48. plt.fill_between(x,np.abs(x)<0.5,sin,sin>0.5,color='g',alpha =0.8)
  49. plt.fill_between(x,cos,where = (-2.5<x)&(x<-0.5),color = 'purple')
  50. plt.grid()
  51. plt.savefig("D:\python学习数据可视化matplot学习.png",dpi = 300)
  52. plt.show()
复制代码
到此这篇关于matplotlib绘制正余弦曲线图的实现的文章就先容到这了,更多相关matplotlib 正余弦曲线图内容请搜刮脚本之家从前的文章或继续欣赏下面的相关文章希望大家以后多多支持脚本之家!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作