代码展示:
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对象