matplotlib 绘图实例01:正弦余弦曲线

时间:2024-02-24 22:17:10

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

第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{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"))   #箭头指向的弯曲度

第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{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))   #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/

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