画一个三角函数的坐标图,并且在边上加上备注
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 定义数据
x =np.linspace(-np.pi,np.pi,256)
s = np.sin(x)
c = np.cos(x)
# 画出基本图形
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
[<matplotlib.lines.Line2D at 0x119ec2e90>]
# 修改布局
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.set_xlim(-4,10)
ax.set_ylim(s.min()*1.1,s.max()*1.1)
ax.set_xticks(np.linspace(-4,4,9));
# 方法1:去掉边框刻度,增加辅助线
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.set_xlim(-4,10)
ax.set_ylim(s.min()*1.1,s.max()*1.1)
ax.set_xticks([]);
ax.set_yticks([]);
ax.plot((x.min()*1.1,x.max()*1.1),(0,0),color = 'black')
ax.plot((0,0),(c.min()*1.1,c.max()*1.1),color = 'black')
ax.spines['left'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_color('none')
ax.spines?
# 该方法内容在这里继续
# 方法2:将坐标移到中间
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.set_xlim(-4,10)
ax.set_ylim(s.min()*1.1,s.max()*1.1)
ax.set_xticks(np.linspace(-4,4,9));
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 理解这个是做什么的
ax.yaxis.set_ticks_position('left') # 理解这个是做什么的
ax.spines['left'].set_position(('data',0)) # 理解这个是做什么的
ax.spines['bottom'].set_position(('data',0)) # 理解这个是做什么的
# 其他内容作为主线继续
# 遮盖右侧的直线(失败)
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.set_xlim(-4,10)
ax.set_ylim(s.min()*1.1,s.max()*1.1)
ax.set_xticks(np.linspace(-4,4,9));
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 理解这个是做什么的
ax.yaxis.set_ticks_position('left') # 理解这个是做什么的
ax.spines['left'].set_position(('data',0)) # 理解这个是做什么的
ax.spines['bottom'].set_position(('data',0)) # 理解这个是做什么的
## 外来物种
from matplotlib.transforms import Bbox
from matplotlib.path import Path
rect = plt.Rectangle((4, -0.02), 6, 0.04, facecolor="white",alpha = 100,fill = True,lw = 1,visible = True)
plt.gca().add_patch(rect)
#bbox = Bbox.from_bounds(-1, -1, 0.5, 0.5)
plt.Rectangle?
# 完整案例-设置坐标轴
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.tick_params(axis='x',top = 'off')
ax.tick_params(axis='y',right = 'off')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.set_ylim(s.min()*1.1,s.max()*1.1);
## 完整案例 - 增加注释(箭头、点)、辅助线
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.tick_params(axis='x',top = 'off')
ax.tick_params(axis='y',right = 'off')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.set_ylim(s.min()*1.1,s.max()*1.1);
# sin
ax.scatter(np.pi/2,np.sin(np.pi/2),20)
ax.annotate(r'$\sin(\frac{\pi}{2}):top\ point$',
xy=(np.pi/2,np.sin(np.pi/2)),
xytext=(3,1),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
ax.plot((np.pi/2 , np.pi/2),(0,np.sin(np.pi/2)),color = 'black',lw=0.5,ls='--')
# cos
ax.scatter(np.pi*2/3,np.cos(np.pi*2/3),20)
ax.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(np.pi*2/3,np.cos(np.pi*2/3)),
xytext=(3,-0.5),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
<matplotlib.text.Annotation at 0x11648e510>
## 完整案例 - 修改刻度说明
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.tick_params(axis='x',top = 'off')
ax.tick_params(axis='y',right = 'off')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.set_ylim(s.min()*1.1,s.max()*1.1);
# sin
ax.scatter(np.pi/2,np.sin(np.pi/2),20)
ax.annotate(r'$\sin(\frac{\pi}{2}):top\ point$',
xy=(np.pi/2,np.sin(np.pi/2)),
xytext=(3,1),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
ax.plot((np.pi/2 , np.pi/2),(0,np.sin(np.pi/2)),color = 'black',lw=0.5,ls='--')
# cos
ax.scatter(np.pi*2/3,np.cos(np.pi*2/3),20)
ax.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(np.pi*2/3,np.cos(np.pi*2/3)),
xytext=(3,-0.5),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
ax.set_xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
ax.set_xticklabels((r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'));
## 完整案例 - 增加英文说明
fig,ax = plt.subplots(figsize = (10,6))
ax.plot(x,s)
ax.plot(x,c)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.tick_params(axis='x',top = 'off')
ax.tick_params(axis='y',right = 'off')
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
ax.set_ylim(s.min()*1.1,s.max()*1.1);
# sin
ax.scatter(np.pi/2,np.sin(np.pi/2),20)
ax.annotate(r'$\sin(\frac{\pi}{2}):top\ point$',
xy=(np.pi/2,np.sin(np.pi/2)),
xytext=(3,1),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
ax.plot((np.pi/2 , np.pi/2),(0,np.sin(np.pi/2)),color = 'black',lw=0.5,ls='--')
# cos
ax.scatter(np.pi*2/3,np.cos(np.pi*2/3),20)
ax.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(np.pi*2/3,np.cos(np.pi*2/3)),
xytext=(3,-0.5),fontsize=20,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
ax.set_xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
ax.set_xticklabels((r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'));
# 注释
ax.annotate('map',xytext=(-3,0.75),fontsize=20,xy=(0,1));