Python绘制正余弦函数图像的方法
2018-08-28 15:06
761 查看
今天打算通过绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样。通过这个过程来学习如何进行对图表的一些元素的进行调整。
01. 简单绘图
matplotlib有一套允许定制各种属性的默认设置。你可以几乎控制matplotlib中的每一个默认属性:图像大小,每英寸点数,线宽,色彩和样式,子图(axes),坐标轴和网格属性,文字和字体属性,等等。
安装
pip install matplotlib
虽然matplotlib的默认设置在大多数情况下相当好,你却可能想要在一些特别的情形下更改一些属性。
from pylab import * x = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(x), np.sin(x) plot(x,C) plot(x,S) show()
show image
02. 设置基本元素
这边的基本元素主要有几下几点:
线的颜色,粗细,和线型 刻度和标签 还有图例
代码比较简单,基本上在我的第一讲内容里都讲过了。
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()
show image
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()这个函数中的data是啥意思?我查了下官网。解释如下
然后最后发现,上面的写法可以用一定更简洁的方式设置,是等价的。
ax.spines['bottom'].set_position('zero') ax.spines['left'].set_position('zero')
show image
04. 添加注释
现在的图形部分已经成型,接下让我们现在使用annotate命令注解一些我们感兴趣的点。
我们选择
2π/3作为我们想要注解的正弦和余弦值。我们将在曲线上做一个标记和一个垂直的虚线。然后,使用annotate命令来显示一个箭头和一些文本。
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,指定类型,data 是说基于数值来定位; 第四个参数,
xytext,是注释的位置,结合第五个参数,就是根据偏移量来决定注释位置; 第五个参数,
textcoords,值为offset points,就是说是相对位置; 第六个参数,
fontsize,注释大小; 第七个参数,
arrowprops,对箭头的类型的一些设置。
show image
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()
绘制抛物线:
X1=np.linspace(-4,4,100,endpoint=True) plt.plot(X1,(X1**2)/9)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
相关文章推荐
- python使用PyGame绘制图像并保存为图片文件的方法
- Python基于Matplotlib库简单绘制折线图的方法示例
- python数字图像处理:图像的绘制
- 【caffe学习笔记之5】Win10系统下Caffe的Python接口设置方法并绘制网络结构图
- python matplotlib图像的绘制
- 图像标注工具labelImg安装方法(win10+Python3.5)
- 再探win32绘制正弦图像的另一种方法:指定映射模式
- Python实现从excel读取数据并绘制成精美图像
- python绘制立方体的方法
- 在Ubuntu14.04和Python3.4-3.6环境中,matplotlib不显示图像的问题的解决方法
- Python和Perl绘制中国北京跑步地图的方法
- 【python图像处理】python绘制灰度直方图
- Python Imaging Library:ImageDraw Module(图像绘制模块)
- python-opencv笔记 图像的读取和简单几何图形绘制
- opencv无法读取视频解决方法&&抽取视频帧存储为图像(python)
- python递归函数绘制分形树的方法
- 图像特征检测方法—SIFT的Python实现
- python对DICOM图像的读取方法详解
- Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
- python数字图像处理(5):图像的绘制