Matplotlib-综合演练篇(正余弦函数)

综合演练目的和步骤

这里写图片描述

最终效果图:
这里写图片描述

代码展示:

import matplotlib.pyplot as plt
#from matplotlib import pyplot as plt
import numpy as np
from numpy import pi as PI

# 用于正常显示中文标签
plt.rcParams["font.sans-serif"]=['SimHei']  
# 用来正常显示负号
plt.rcParams['axes.unicode_minus']=False

#linspace在(−π,π)之间分成共 256个小段,并把这256个值赋予X,从-pi到pi平均与256个点
X = np.linspace(-PI,PI,256,endpoint=True)

# 根据X的值求正弦和余弦函数
sin,cos = np.sin(X),np.cos(X)

#绘制正弦和余弦图像
plt.figure(figsize=(8,5))

#这里`b-`是`color="blue",linestyle="-"`的简写形式 
#`lw`=`linewidth`,两种写法都是合理的,但是`b-`这种形式明 显更加简洁
plt.plot(X,sin,"b-",lw=2.5,label="正弦")
plt.plot(X,cos,"r-",lw=2.5,label="余弦")

#将X和Y轴同时拉伸1.5倍
plt.xlim(X.min()*1.5,X.max()*1.5)
plt.ylim(sin.min()*1.5,sin.max()*1.5)

#手动指定x轴和y轴的坐标刻度
plt.xticks([-PI,-PI/2,0,PI/2,PI],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$\pi/2$',r'$\pi$'])
plt.yticks([-1,0,1])

#隐藏和平移坐标轴
#获取到Axes对象
ax = plt.gca()

#隐藏右边界和上边界
ax.spines["right"].set_color("none")
ax.spines["top"].set_color("none")

#设置坐标轴刻度显示位置
#将x轴坐标的刻度显示到图表的下方
ax.xaxis.set_ticks_position('bottom')
#将y轴坐标的刻度显示到图表的左边
ax.yaxis.set_ticks_position("left")

#把x轴底部移到y轴0处
#把y轴左边移到x轴0处
ax.spines["bottom"].set_position(("data",0))
ax.spines["left"].set_position(("data",0))

#根据两点绘制一条虚线
t = 2/3 *PI
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--") 
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--") 

#用绘制散点图的方法在正弦和余弦图像上分别标注出一个点[t,sin(t)]  [t,cos(t)]
plt.scatter([t,],[np.sin(t)],s=50,color="b")
plt.scatter([t,],[np.cos(t)],s=50,color="r")

#给红色的点添加注释
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
             xy=(t, np.cos(t)), 
             xycoords='data', 
             xytext=(-90, -50),
             textcoords='offset points', 
             fontsize=16, 
             arrowprops=dict(arrowstyle="->", 
             connectionstyle="arc3,rad=.2")) 
#给蓝色的点添加注释
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$', 
             xy=(t, np.sin(t)), 
             xycoords='data', 
             xytext=(+10, +30), 
             textcoords='offset points', 
             fontsize=16, 
             arrowprops=dict(arrowstyle="->", 
             connectionstyle="arc3,rad=.2")) 

#获取x轴和y轴的刻度,并设置字体
for label in ax.get_xticklabels()+ax.get_yticklabels():
    label.set_fontsize(18)
    #为每个刻度设置边框,facecolor:刻度的背景颜色,edgecolor:边框的颜色,alpha:背景的透明度
    label.set_bbox(dict(facecolor='r',edgecolor='g',alpha=0.4))


# 显示图例
plt.legend(loc="upper left")
#显示图表
plt.show()
###这里结果显示最终与目标稍有不同是为了显示label.set_bbox()函数的效果

图表显示结果:
这里写图片描述

总结:

1.利用np.linspace(-np.pi,np.pi,256,endpoint=True) 可以快速生产数据
2.通过plt.gca()获得当前的Axes对象ax
3.通过plt.xlim()方法来实现图表的留白
4.通过plt.xticks()、plt.yticks() 来设置坐标轴刻度
5.通过plt.annotate() 方法来为图表添加注释
6.for label in ax.get_xticklabels() + ax.get_yticklabels(): 方式来遍历图表中的label对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值