在 Python 中绘制正弦和余弦图的完整代码
使用 Python 绘制正弦和余弦图。从默认设置开始,逐步调整和改进,看起来不错,就像你在初中和高中学习的照片一样。使用此过程来了解如何修改图表的各个元素。
01。简单绘图
matplotlib 具有默认设置,允许您自定义各种属性。您可以控制 matplotlib 中的几乎所有默认属性:图像大小、点/英寸、线宽、颜色和样式、子区域(轴)、轴和网格属性、文本和字体属性等。
虽然 matplotlib 的默认设置在大多数情况下已经足够好了,但在特殊情况下您可能需要修改某些属性。 ?有传说
代码比较简单,第一讲基本就讲完了。显示图片
import numpy as np
from matplotlib import pyplot as plt
plt.figure(figsize=(10,6), dpi=80)
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(x), np.sin(x)
# 设置线的颜色,粗细,和线型
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label=r'$sin(x)$')
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label=r'$cos(x)$')
# 如果觉得线条离边界太近了,可以加大距离
plt.xlim(x.min()*1.2, x.max()*1.2)
plt.ylim(C.min()*1.2, C.max()*1.2)
# 当前的刻度并不清晰,需要重新设定,并加上更直观的标签
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$'])
plt.yticks([-1,0,1],
[r'$-1$', r'$0$', r'$1$'])
# 添加图例
plt.legend()
plt.show()
复制代码
03。动轴
还记得初高中时学过的三角函数图,但事实并非如此。它应该由四个象限组成。但这是一个箱线图。
所以下一步是移动轴,使其达到我们所知道的样子。
我们只需要两个轴(x和y轴),所以我们需要隐藏顶部和右侧的轴(只需将颜色设置为None)。
# plt.gca(),全称是get current axis
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 由于我们移动的是左边和底部的轴,所以不用设置这两个也可以
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 指定data类型,就是移动到指定数值
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
复制代码
关于set_position()
这个函数中的数据是什么意思?我查了官方网站。解释如下
然后我终于意识到,上面的写法可以设置得更简洁,而且是等价的。显示图片
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')
复制代码
04。添加注释
现在图形部分已准备就绪,让我们使用注释命令来注释一些有趣的点。
我们选择要评论的正弦和余弦值2π/3
。我们在曲线上做一个标记和一条垂直虚线。然后使用注释命令显示箭头和一些文本。
t = 2*np.pi/3
# 利用plt.plot绘制向下的一条垂直的线,利用plt.scatter绘制一个点。
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
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"))
# 利用plt.plot绘制向上的一条垂直的线,利用plt.scatter绘制一个点。
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
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
。这里也解释一下。
第一个参数是评论内容;第二个参数xy
,是要注释的点;第三个参数xycoords
指定类型,数据表示基于数值定位;第四个参数xytext
是评论的位置。结合第五个参数,根据偏移量确定注释的位置;第五个参数textcoords
为值偏移点,即相对位置;第六个参数fontsize
,是评论的大小;第七个参数,arrowprops
,箭头类型的一些设置。显示图片
05。完整代码
上面是片段代码的解释,这里是完整代码
import numpy as np
from matplotlib import pyplot as plt
plt.figure(figsize=(10,6), dpi=80)
x = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(x), np.sin(x)
# 设置线的颜色,粗细,和线型
plt.plot(x, C, color="blue", linewidth=2.5, linestyle="-", label=r'$sin(x)$')
plt.plot(x, S, color="red", linewidth=2.5, linestyle="-", label=r'$cos(x)$')
# 如果觉得线条离边界太近了,可以加大距离
plt.xlim(x.min()*1.2, x.max()*1.2)
plt.ylim(C.min()*1.2, C.max()*1.2)
# 当前的刻度并不清晰,需要重新设定,并加上更直观的标签
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$'])
plt.yticks([-1,1],
[r'$-1$', r'$1$'])
# 添加图例
plt.legend(loc='upper left')
# plt.gca(),全称是get current axis
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
# 由于我们移动的是左边和底部的轴,所以不用设置这两个也可以
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# 指定data类型,就是移动到指定数值
# ax.spines['bottom'].set_position('zero')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
t = 2*np.pi/3
# 利用plt.plot绘制向下的一条垂直的线,利用plt.scatter绘制一个点。
plt.plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.cos(t),], 50, color ='blue')
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"))
# 利用plt.plot绘制向上的一条垂直的线,利用plt.scatter绘制一个点。
plt.plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
plt.scatter([t,],[np.sin(t),], 50, color ='red')
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.show()
复制代码
作者:Python编程时间
链接:https://juejin.im/post/5b84d1f3f265da436152f9 Nugg.
版权归作者所有。商业转载请联系作者获得许可。非商业转载请注明来源。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。