zoukankan      html  css  js  c++  java
  • matplotlib 绘图实例01:正弦余弦曲线

    该讲的实例结果如下图所示:    

    第01步:导入模块,并设置显示中文和负号的属性;
    import matplotlib.pyplot as plt
    import numpy as np
    
    plt.rcParams['font.sans-serif']=['SimHei'] # 用于正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False   # 用来正常显示负号

    第02步:创建x轴数据,从-pi到pi平均取256个点; 

    x = np.linspace(-np.pi,np.pi,256,endpoint=True)   #获取x坐标

    第03步:创建y轴数据,根据X的值,求正弦和余弦函数; 

    sin,cos = np.sin(X),np.cos(X)  #获取y坐标

    第04步:绘制正弦、余弦函数图,并将图形显示出来,设置正弦函数曲线的颜色为蓝色(blue),线型为实线,线宽为2.5mm;余弦函数曲线的颜色为红色(red),线型为实线,线宽为2.5mm。显示结果如下图所示;

    plt.plot(X,sin,"b-",lw=2.5,label="正弦Sin()")  
    #X:x轴;sin:y轴;b-:color="blue",linestyle="-"的简写;lw:linewidth;label:线条的名称,可用于后面的图例 plt.plot(X,cos,"r-",lw=2.5,label="余弦Cos()") #cos:y轴;r-:color="red"; plt.show() #显示图表

    第05步:设置坐标轴的范围,将x轴、y轴同时拉伸1.5倍,显示结果如下图所示;

    plt.xlim(X.min()*1.5,X.max()*1.5)
    plt.ylim(cos.min()*1.5,cos.max()*1.5)

    第06步:设置x轴、y轴的坐标刻度,显示结果图下图所示;

    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])

    第07步:为图表添加标题,标题内容为“绘图实例之COS()&SIN()”,字体大小设置为16,字体颜色设置为绿色(green);显示结果如下图所示; 

    plt.title("绘图实例之COS()&SIN()",fontsize=16,color="green")

    第08步:在图表右下角位置添加备注标签,标签文本为“By:biyoulin”,文本大小为16,文本颜色为紫色(purple) ,显示结果如下图所示;

    plt.text(+2.1,-1.4,"By:biyoulin",fontsize=16,color="purple")

    第09步:获取Axes对象,并隐藏右边界和上边界;显示结果如下图所示;

    ax=plt.gca()  #获取Axes对象
    ax.spines['right'].set_color('none')    #隐藏右边界
    ax.spines['top'].set_color('none')      #隐藏上边界

    第10步:将x坐标轴的坐标刻度设置在坐标轴下侧,坐标轴平移至经过零点(0,0)的位置,显示结果如下图所示;

    ax.xaxis.set_ticks_position('bottom')   #x轴坐标刻度设置在坐标轴下面
    ax.spines['bottom'].set_position(('data',0))  #x轴坐标轴平移至经过零点(0,0)位置

    第11步:将y坐标轴的坐标刻度设置在坐标轴左侧,坐标轴平移至经过零点(0,0)的位置,显示结果如下图所示; 

    ax.yaxis.set_ticks_position('left')           #y轴坐标刻度设置在坐标轴下面
    ax.spines['left'].set_position(('data',0))    #y轴坐标轴平移至经过零点(0,0)位置

    第12步:添加图例,图例位置为左上角,图例文字大小为12,显示结果如下图所示;

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

    第13步:在正弦函数曲线上找出x=(2π/3)的位置,并作出与x轴垂直的虚线,线条颜色为蓝色(blue),线宽设置为1.5mm;在余弦函数曲线上找出x=-π的位置,并作出与x轴垂直的虚线,线条颜色为红色(red),线宽设置为1.5mm;显示结果如下图所示; 

    t1 = 2*np.pi/3 #设定第一个点的x轴值
    t2 = -np.pi    #设定第二个点的x轴值
    plt.plot([t1,t1],[0,np.sin(t1)],color ='b',linewidth=1.5,linestyle="--")
    #第一个列表是x轴坐标值,第二个列表是y轴坐标值
    #这两个点坐标分别为(t1,0)和(t1,np.sin(t1)),根据两点画直线
    plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")
    #这两个点坐标分别为(t2,0)和(t2,np.cos(t2)),根据两点画直线

    第14步:用绘制散点图的方法在正弦,余弦函数上标注这两个点的位置,设置点大小为50,设置相应的点颜色; 

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

    第15步:为图表添加注释;显示结果如下图所示; 

    plt.annotate(r'$sin(frac{2pi}{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"))   #箭头指向的弯曲度

    第16步:获取x,y轴的刻度,并设置字体;

    for label in ax.get_xticklabels()+ax.get_yticklabels():           #获取刻度
        label.set_fontsize(18)                                        #设置刻度字体大小

    使用".set_bbox"还可以给刻度文本添加边框,如果给全局文本添加边框,可以将此放在循环里,如果对单个刻度文本进行设置,可以放在循环外部; 

    for label in ax.get_xticklabels()+ax.get_yticklabels():           #获取刻度
        label.set_fontsize(18)                                        #设置刻度字体大小
    
        label.set_bbox(dict(facecolor='r',edgecolor='g',alpha=0.5))   #set_bbox为刻度添加边框
                                                                      #facecolor:背景填充颜色
                                                                      #edgecolor:边框颜色
                                                                      #alpha:透明度

    第17步:绘制填充区域;

    plt.fill_between(X,np.abs(X)<0.5,sin,sin>0.5,color='g',alpha=0.8)
    #设置正弦函数的填充区域,颜色为绿色(green),其中的一种方式
    plt.fill_between(X,cos,where=(-2.5<X)&(X<-0.5),color='purple')
    #设置余弦函数的填充区域,颜色为紫色(purple),另外一种方式

    第18步:绘制网格线; 

    plt.grid()

    第19步:保存图表,保存为“COS&SIN.PNG”,dpi设置为300;

    plt.savefig("C:\绘图实例之COS()&SIN().PNG",dpi=300)

    绘制完成!!

    #!/usr/bin/env python
    #!-*-coding:utf-8 -*-
    #!@Author : Biyoulin
    #!@Time   : 2018/9/1 14:17
    
    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=True)   #获取x坐标
    
    sin,cos = np.sin(X),np.cos(X)  #获取y坐标
    
    plt.plot(X,sin,"b-",lw=2.5,label="正弦Sin()")  #X:x轴;sin:y轴;b-:color="blue",linestyle="-"的简写;lw:linewidth
    plt.plot(X,cos,"r-",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("绘图实例之COS()&SIN()",fontsize=16,color="green")
    
    plt.text(+2.1,-1.4,"By:biyoulin",fontsize=16,color="purple")
    
    
    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.legend(loc="upper left",fontsize=12)
    
    
    t1 = 2*np.pi/3 #设定第一个点的x轴值
    t2 = -np.pi   #设定第二个点的x轴值
    plt.plot([t1,t1],[0,np.sin(t1)],color ='b',linewidth=1.5,linestyle="--")
    #第一个列表是x轴坐标值,第二个列表是y轴坐标值
    #这两个点坐标分别为(t1,0)和(t1,np.sin(t1)),根据两点画直线l1
    plt.plot([t2,t2],[0,np.cos(t2)],color ='r',linewidth=1.5,linestyle="--")
    #这两个点坐标分别为(t2,0)和(t2,np.cos(t2)),根据两点画直线l2
    
    
    plt.scatter([t1,],[np.sin(t1),], 50, color ='b')
    plt.scatter([t2,],[np.cos(t2),], 50, color ='r')
    
    
    plt.annotate(r'$sin(frac{2pi}{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))   #set_bbox为刻度添加边框
                                                                      #facecolor:背景填充颜色
                                                            #edgecolor:边框颜色
                                                                      #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("C:\绘图实例之COS()&SIN().PNG",dpi=300)
    
    plt.show()   #显示图表
    完整实例代码

    参考博文:https://blog.csdn.net/MESSI_JAMES/article/details/80819144

    作者:biyoulin

    出处:http://www.cnblogs.com/biyoulin/

    版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

  • 相关阅读:
    【Base64】用 js 编 解 码 base64
    【ecshop】调用购物车商品数量
    【LNMP】 fileinfo扩展安装
    【Twitter接口】网站嵌入推特信息
    【新浪微博接口】网站接入微博秀
    【Node.js】Mac 下安装node图文详解
    【Select2】带搜索框的下拉框美化插件
    Java中食之无味弃之可惜的数组
    当我谈过年时,我该谈些什么?
    我没回老家过春节的那4点原因
  • 原文地址:https://www.cnblogs.com/biyoulin/p/9564832.html
Copyright © 2011-2022 走看看