Python绘制正余弦函数图像的方法

 更新时间:2018年08月28日 15:06:45   作者:Python编程时光  
这篇文章主要介绍了Python绘制正余弦函数图像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

今天打算通过绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样。通过这个过程来学习如何进行对图表的一些元素的进行调整。

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实现去除Excel重复数据并统计重复次数

    Python实现去除Excel重复数据并统计重复次数

    这篇文章主要为大家详细介绍了如何利用Python语言实现文本数据去重,创建包含唯一值的新列,并统计文本数据出现的次数,需要的可以参考下
    2023-08-08
  • Pyramid将models.py文件的内容分布到多个文件的方法

    Pyramid将models.py文件的内容分布到多个文件的方法

    默认的Pyramid代码结构中,就只有一个models.py文件,在实际项目中,如果需要对models进行分类,放到不同文件下,应该怎么办
    2013-11-11
  • Python3.6 之后字典是有序的?

    Python3.6 之后字典是有序的?

    字典数据是有序的, 但是这个序不是由外部控制, 而是内部字典定位机制的序 所以对外来讲, 数据本身是无序的 你每次遍历的顺序一样, 是因为枚举结果是按内部排序输出 而无序则表示在你无法从外部控制最终的输出顺序,下面我们来学习Python字典有序性的相关资料又当怎样吧
    2021-12-12
  • Python字符串和正则表达式中的反斜杠(''\'')问题详解

    Python字符串和正则表达式中的反斜杠(''\'')问题详解

    在本篇文章里小编给大家整理的是关于Python字符串和正则表达式中的反斜杠('\')问题以及相关知识点,有需要的朋友们可以学习下。
    2019-09-09
  • Python设计密码强度校验程序

    Python设计密码强度校验程序

    这篇文章主要介绍了Python如何设计密码强度校验程序,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 如何将Yolov5的detect.py修改为可以直接调用的函数详解

    如何将Yolov5的detect.py修改为可以直接调用的函数详解

    YOLOv4还没有退热,YOLOv5已经发布,下面这篇文章主要给大家介绍了关于如何将Yolov5的detect.py修改为可以直接调用的函数的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Python光学仿真wxpython透镜演示系统初始化与参数调节

    Python光学仿真wxpython透镜演示系统初始化与参数调节

    这篇文章主要为大家介绍了Python光学仿真wxpython透镜演示系统的初始化与参数调节,同样在学习wxpython透镜演示系统的入门同学可以借鉴参考下,希望能够有所帮助
    2021-10-10
  • Python代码使用 Pyftpdlib实现FTP服务器功能

    Python代码使用 Pyftpdlib实现FTP服务器功能

    FTP 服务器,在此之前我都是使用Linux的vsftpd软件包来搭建FTP服务器的,现在发现了利用pyftpdlib可以更加简单的方法即可实现FTP服务器的功能 ,需要的朋友可以参考下
    2019-07-07
  • 用Python写一个自动木马程序

    用Python写一个自动木马程序

    这篇文章主要介绍了用Python写一个自动木马程序的方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • python语法 之与用户交互和运算符

    python语法 之与用户交互和运算符

    这篇文章主要介绍了python语法 之与用户交互和运算符,用户交互就是人往计算机中input/输入数据,计算机print/输出结果,下文更多相关内容需要的朋友可以参考一下
    2022-04-04

最新评论