# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
#用于产生x1,x2之间的N点行矢量,相邻数据跨度相同。
#其中x1、x2、N分别为起始值、终止值、元素个数。若缺省N,默认点数为100。
x = np.linspace(-np.pi, np.pi, 1000)
#函数表达式
cos_y = np.cos(x) / 2
sin_y = np.sin(x)
#指定点坐标
xo = np.pi * 3 / 4
yo_cos = np.cos(xo) / 2
yo_sin = np.sin(xo)
#区域显示范围
mp.xlim(x.min() * 1.1, x.max() * 1.1)
mp.ylim(sin_y.min() * 1.1, sin_y.max() * 1.1)
#y轴上的标记显示点位
mp.yticks([-1, -0.5, 0.5, 1],)
#设置边框,移动显示为坐标轴
ax = mp.gca()
ax.spines['left'].set_position(('data', 0))
ax.spines['bottom'].set_position(('data', 0))
ax.spines['right'].set_position(('data', 0))
ax.spines['top'].set_position(('data', 0))
# ax.spines['right'].set_color('none')
# ax.spines['top'].set_color('none')
#自定义设置坐标轴显示内容
# 第二个参数不写会把第一个列表中的参数格式化为字符串
mp.xticks([-np.pi, -np.pi / 2, 0, np.pi / 2, np.pi * 3 / 4, np.pi],
[r'$-\pi$', r'$-\frac{\pi}{2}$', r'$0$', r'$\frac{\pi}{2}$',
r'$\frac{3\pi}{4}$', r'$\pi$'])
#绘图函数
mp.plot(x, cos_y, linestyle='-', linewidth=2,
color='dodgerblue', label=r'$y=\frac{1}{2}cos(x)$')
mp.plot(x, sin_y, linestyle='-', linewidth=2.5,
color='orangered', label=r'$y=sin(x)$')
mp.plot([xo, xo], [yo_cos, yo_sin],
linestyle='--',
linewidth=1, color='green')
#显示标注点
mp.scatter([xo, xo], [yo_cos, yo_sin],
s=60, edgecolor='limegreen', facecolor='white', zorder=3)
#标注点显示标注
mp.annotate(
#备注文本
r'$\frac{1}{2}cos(\frac{3\pi}{4})=-\frac{\sqrt{2}}{4}$',
#目标位置
xy=(xo, yo_cos),
#目标坐标系
xycoords='data',
#文本相对显示位置
xytext=(-90, -40),
#文本坐标系
textcoords='offset points',
#字体大小
fontsize=14,
#设置箭头属性
arrowprops=dict(arrowstyle='-|>',
connectionstyle='arc3,rad=0.2'))
mp.annotate(
r'$sin(\frac{3\pi}{4})=\frac{\sqrt{2}}{2}$',
xy=(xo, yo_sin),
xycoords='data',
xytext=(-90, -40),
textcoords='offset points',
fontsize=14,
arrowprops=dict(arrowstyle='-|>',
connectionstyle='arc3,rad=0.2'))
mp.legend(loc='upper left')#显示文本位置loc
mp.show()