一个正弦函数、余弦函数、坐标系的实例解析

# -*- coding: UTF-8 -*-

# Imports
# 用 import 导入模块,安装“模块.函数”的格式使用这个模块的函数。
import numpy as np
import matplotlib.pyplot as plt

# Create a new figure of size 8x6 points, using 100 dots per inch
# 创建一个 8 * 6 点(point)的图,并设置分辨率为 100。
plt.figure(figsize=(10,6), dpi=80)

# Create a new subplot from a grid of 1x1
plt.subplot(111)

# linspace()和matlab的linspace很类似,用于创建指定数量等间隔的序列,实际生成一个等差数列;
# 生成首位是-π,末位是π,含256个数的等差数列。
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C = np.cos(X)
S = np.sin(X)

# Plot cosine using blue color with a continuous line of width 1 (pixels)
plt.plot(X, C, color="blue", linewidth=2.0, linestyle="-")

# Plot sine using green color with a continuous line of width 1 (pixels)
plt.plot(X, S, color="red", linewidth=2.0, linestyle="-")

# Set x limits
# plt.xlim(-4.0,4.0)
# 图片边界设置得不好,所以有些地方看得不是很清楚。因此进行调整。
plt.xlim(X.min()*1.1, X.max()*1.1)

# Set x ticks
# plt.xticks(np.linspace(-4,4,9,endpoint=True))
# 我们讨论正弦和余弦函数的时候,通常希望知道函数在“±π”和“±π/2”的值。因此进行如下调整
# plt.xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi])
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$'])

# Set y limits
# plt.ylim(-1.0,1.0)
# 图片边界设置得不好,所以有些地方看得不是很清楚。因此进行调整。
plt.ylim(C.min()*1.1, C.max()*1.1)

# Set y ticks
plt.yticks(np.linspace(-1,1,5,endpoint=True))
# plt.yticks([-1, 0, +1])

# 坐标轴线和上面的记号连在一起就形成了脊柱(Spines,一条线段上有一系列的凸起,是不是很像脊柱骨啊~),
# 它记录了数据区域的范围。它们可以放在任意位置,不过至今为止,我们都把它放在图的四边。
# 实际上每幅图有四条脊柱(上下左右),为了将脊柱放在图的中间,
# 我们必须将其中的两条(上和右)设置为无色,然后调整剩下的两条到合适的位置——数据空间的 0 点。

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

# 我们在图的左上角添加一个图例。为此,我们只需要在 plot 函数里以「键 - 值」的形式增加一个参数。
plt.plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cos")
plt.plot(X, S, color="red",  linewidth=2.5, linestyle="-", label="sin")

# plt.legend(loc='upper left', frameon=False)
# bbox_to_anchor被赋予的二元组中,第一个数值用于控制legend的左右移动,值越大越向右边移动,
# 第二个数值用于控制legend的上下移动,值越大,越向上移动。
# plt.plot的label文字大小在plt.legend中设置:fontsize
plt.legend(loc='upper left', bbox_to_anchor=(0,1),shadow=True, fontsize=12)

# 我们希望在“2π/3”的位置给两条函数曲线加上一个注释。
# 首先,我们在对应的函数图像位置上画一个点;
# 然后,向横轴引一条垂线,以虚线标记;最后,写上标签。
# cos
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
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"))
# sin
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=1.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
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"))

# 坐标轴上的记号标签被曲线挡住了,作为强迫症患者这是不能忍的。
# 我们可以把它们放大,然后添加一个白色的半透明底色。这样可以保证标签和曲线同时可见。
for label in ax.get_xticklabels() + ax.get_yticklabels():
    label.set_fontsize(16)
    label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))

# Save figure using 72 dots per inch
# savefig("../figures/exercice_2.png",dpi=72)
# http://www.labri.fr/perso/nrougier/teaching/matplotlib/

# Show result on screen
plt.show()






微信文章:https://mp.weixin.qq.com/s/njYYVivJos4EgmWD7J7KHw
iPython Notebook HTML:http://ooou6mjma.bkt.clouddn.com/sincos.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值