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

# -*- 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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以回答这个问题。以下是使用turtle绘图工具编写带坐标系正弦函数曲线的代码: ```python import turtle import math # 设置坐标系 turtle.penup() turtle.goto(-300, ) turtle.pendown() turtle.goto(300, ) turtle.penup() turtle.goto(, -200) turtle.pendown() turtle.goto(, 200) # 绘制正弦函数曲线 turtle.penup() x = -300 y = 50 * math.sin(x / 50) turtle.goto(x, y) turtle.pendown() for i in range(-300, 301): y = 50 * math.sin(i / 50) turtle.goto(i, y) turtle.done() ``` 希望这个代码能够帮助你绘制出带坐标系正弦函数曲线。 ### 回答2: 使用turtle绘图工具编写一个坐标系正弦函数曲线可以按照以下步骤进行: 1. 导入turtle模块:在Python中使用`import turtle`语句导入turtle模块。 2. 创建画布和画笔:使用`turtle.Screen()`创建一个画布,并使用`turtle.Turtle()`创建一个画笔。 3. 绘制坐标系:使用画笔进行坐标系的绘制,首先将画笔抬起,然后移动到坐标原点,再将画笔放下,绘制x轴和y轴。 4. 绘制正弦函数曲线:使用画笔进行正弦函数曲线的绘制,首先抬起画笔,在x轴上选择一个起始点,然后放下画笔,使用循环语句依次计算曲线上的每个点坐标并进行绘制。可以使用`math.sin()`函数来计算正弦值。 5. 显示结果:使用`turtle.done()`方法显示绘图结果。 下面是使用上述步骤编写的代码示例: ``` import turtle import math # 创建画布和画笔 screen = turtle.Screen() pen = turtle.Turtle() # 绘制坐标系 pen.penup() pen.goto(-200,0) pen.pendown() pen.goto(200,0) pen.penup() pen.goto(0,-100) pen.pendown() pen.goto(0,100) # 绘制正弦函数曲线 pen.penup() pen.goto(-200, 50*math.sin(-200/20*math.pi)) pen.pendown() for x in range(-200, 201): pen.goto(x, 50*math.sin(x/20*math.pi)) # 显示结果 turtle.done() ``` 运行以上代码,就会在画布上绘制出带坐标系正弦函数曲线。 ### 回答3: 使用Python的turtle绘图工具编写一个坐标系正弦函数曲线的代码如下: ```python import turtle import math # 设置坐标系的尺寸 ax, ay = -300, -200 bx, by = 300, 200 # 设置turtle绘图窗口的尺寸 turtle.setup(width=800, height=600) # 创建一个turtle对象 t = turtle.Turtle() # 设置绘图速度 t.speed(10) # 绘制坐标系线 t.penup() t.goto(ax, 0) t.pendown() t.goto(bx, 0) t.penup() t.goto(0, ay) t.pendown() t.goto(0, by) # 绘制正弦函数曲线 t.penup() t.goto(ax, 100 * math.sin((ax / 100) * math.pi)) t.pendown() for x in range(ax, bx + 1): y = 100 * math.sin((x / 100) * math.pi) t.goto(x, y) # 隐藏turtle对象 t.hideturtle() # 点击窗口关闭程序 turtle.done() ``` 在这段代码中,我们使用`turtle.setup`函数设置绘图窗口的尺寸为800x600,并创建一个turtle对象`t`。然后,我们使用`turtle.Turtle`的方法绘制坐标系线。接下来,我们使用`t.goto`方法绘制正弦函数曲线。 在绘制正弦函数曲线时,我们使用了数学模块`math`中的`sin`函数来计算每个x对应的y值。我们将x的范围设置为坐标系的范围`ax`到`bx`,每次移动一个单位,计算出对应的y值,并使用`t.goto`方法将turtle对象移动到相应的位置。为了提高绘图速度,我们将绘图速度设置为10。 最后,我们使用`t.hideturtle`方法隐藏turtle对象,并调用`turtle.done`函数等待用户关闭绘图窗口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值