通过Matplotlib画sin(x)

《Python程序设计与科学计算》中的一些笔记。

1.初始绘制

通过np.linspace生成一个等差数列。为了使曲线变得平滑,在[0,2π]的区间内生成256个数据,生成的图像如图1所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.plot(x, y)
plt.show()

2.调整刻度

由于图像没有显示三角函数关键坐标点的坐标,所以当前刻度不理想。通过xticks与yticks分别设置图像,使图像只显示设置的刻度,如图2所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.xticks([0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi])
plt.yticks([-1, 0, +1])
plt.plot(x, y)
plt.show()


由图2可知,虽然通过xticks与yticks将图像的坐标显示了关键数值,但是由于三角函数的特性,如果直接用π来对x轴进行标记会更好,目前毕竟不够精度。在设置标记的时候,可以同时使用LaTex形式进行坐标刻度的标签标记,如图3所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.xticks([0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi], ['$0$', '$\pi/2$', '$\pi$', r'$3\pi/2$', r'$2\pi$'])
plt.yticks([-1, 0, +1], ['$-1$', '$0$', '$+1$'])
plt.plot(x, y)
plt.show()

3.设置坐标上下限

通过对xlim(xmin,xmax)、ylim(xmin,xmax)进行设置,同样可以限定x轴、y轴的上限和下限。指定x轴坐标范围为[-2,8],y轴的坐标范围为[-1,1],如图4所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.xlim(-2, 8)
plt.ylim(-1.0, 1.0)
plt.plot(x, y)
plt.show()

4.改变图像基本属性

图像的基本属性包含像素、分辨率、大小、颜色、位深、色调、饱和度、亮度、色彩、通道、图像的层次等。Matplotlib可以对图像的基本属性进行更改,结果如图5所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.plot(x, y, color='red', linewidth=4, marker='+', linestyle='-.', label='sin')
plt.legend(loc='upper left', frameon=False)
plt.plot(x, y)
plt.show()

图像属性中的参数color表示颜色;
linewidth表示曲线宽度;
marker表示点型;
linestyle表示线性;
label表示图例。
图5中设置的linewidth为4,曲线变粗。设置的点型为“+”,默认是圆。 线型(linestyle)为点划线形式,更多的选择见表1。
        

5.添加注释(文本、箭头、垂线)

通常为了增强数据的可视化效果,需要给一些特殊点做注释。这里对点(π,0)进行注释标记sin(π)=0,如图6所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=100)
y = np.sin(x)
plt.text(np.pi, 0, '$\sin({\pi})=0$', fontsize='20')
plt.plot(x, y)
plt.show()


为了更加明显地标明注释,这里加入一个箭头,如图7所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
plt.annotate('$\sin({\pi})=0$', xy=(np.pi, 0), xytext=(3 * np.pi / 2, 0.5),arrowprops=dict(facecolor='black', shrink=0.005))
plt.plot(x, y)
plt.show()


为了指明坐标中某一点的具体取值,通常是通过该点向坐标轴做垂线。下面以散点图的形式添加垂线,最终结果如图8所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
t = 3 * np.pi / 2
plt.plot([t, t], [0, np.sin(t)], color='red', linewidth=2.5, linestyle="--")
plt.scatter([t, ], [0], 50, color='red')
plt.plot(x, y)
plt.show()

6.调整坐标轴

通过mpl_toolkits.axisartist.axislines导入SubplotZero模块,以创建子图的形式将多个图像合并,最终得到的坐标轴如图9所示。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axisartist.axislines import SubplotZerox = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
if 1:fig = plt.figure(1)ax = SubplotZero(fig, 1, 1, 1)fig.add_subplot(ax)for direction in ["xzero", "yzero"]:# 在每个轴的末尾添加箭头ax.axis[direction].set_axisline_style("-|>")# 从原点添加x和y轴ax.axis[direction].set_visible(True)for direction in ["left", "right", "bottom", "top"]:# 隐藏边界ax.axis[direction].set_visible(False)ax.plot(x, y)
plt.show()

插值

Numpy下的interp()函数是用来进行插值的操作的,这是一维线性插值法。插值是离散函数逼近的重要方法,即通过函数在有限个点处的取值情况,估算出函数在其他点处的近似值。与拟合不同的是,插值函数经过样本点,要求曲线通过所有的已知数据。拟合函数一般基于最小二乘法,尽量靠近并穿过所有样本点,结果如图10所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, 20)
y = np.sin(x)
yp = None
xi = np.linspace(x[0], x[-1], 100)
yi = np.interp(xi, x, y, yp)
fig, ax = plt.subplots()
ax.plot(x, y, 'o', xi, yi, '.')
plt.show()

8.曲线的填充部分

在微积分运算中求曲线与坐标轴围成的面积,利用Matplotlib中fill_between刻画曲线与坐标轴之间围成的部分就非常重要了。这里选择sin(x)曲线与x轴围成的面积进行填充,如图11所示。

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
fig, ax = plt.subplots(sharex=True)
ax.plot(x, y, color='black')
ax.axhline(0, color='black', lw=2)
ax.fill_between(x, 0, y)
plt.plot(x, y)
plt.show()

9.绘制完整的曲线

我们将上面的一些功能集中绘制出来,为了更好地展现结果,对其添加相应的注释,调整了坐标轴、刻度及箭头的样式,最终绘图如图12所示。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axisartist.axislines import SubplotZerox = np.linspace(0, 2 * np.pi, num=256)
y = np.sin(x)
# 坐标轴
if 1:fig = plt.figure(1)ax = SubplotZero(fig, 1, 1, 1)fig.add_subplot(ax)for direction in ["xzero", "yzero"]:# 在每个轴的末尾添加箭头ax.axis[direction].set_axisline_style("-|>")# 从原点添加x和y轴ax.axis[direction].set_visible(True)for direction in ["left", "right", "bottom", "top"]:# 隐藏边界ax.axis[direction].set_visible(False)ax.plot(x, y)ax.set_title('sin(x)')
# 坐标
plt.xticks([0, np.pi / 2, np.pi, 3 * np.pi / 2, 2 * np.pi], ['$0$', '$\pi/2$', '$\pi$', r'$3\pi/2$', r'$2\pi$'])
plt.yticks([-1, 0, +1], ['$-1$', '$0$', '$+1$'])
# 垂线
t = 3 * np.pi / 2
plt.plot([t, t], [0, np.sin(t)], color='red', linewidth=2.5, linestyle="--")
plt.scatter([t, ], [0], 50, color='red')
# 注释
plt.annotate('$\sin({3\pi/2})=-1$', xy=(3*np.pi/2, -1), xytext=(2 * np.pi, -0.5),arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.show()

通过Matplotlib画sin(x)相关推荐

  1. python 画三维函数图-如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

  2. python画三维立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  3. python怎样画立体图-如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  4. Matplotlib画动态散点图:

    Matplotlib画动态散点图:  X=np.random.randint(0,512,20).tolist() Y=np.random.randint(0,512,20).tolist() pri ...

  5. python画三维立体图完整代码_如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

  6. python绘制三维地形图_如何用Matplotlib 画三维图的示例代码

    用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...

  7. python matplotlib画球

    matplotlib画球 1. 效果 2. 代码 3.参考链接 1. 效果 2. 代码 import matplotlib.pyplot as plt import numpy as npdef hu ...

  8. python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例

    python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...

  9. 用Python的turtle和matplotlib画出圆满和爱心

    马上就要到六一儿童节了,小朋友很喜欢画画,这里就用Pyhton来画一些简单形状. 首先是圆形,圆形的寓意是圆满.完美.团圆.优胜和团结.圆形在形状上是一个平面中点到定点距离相等的图形,象征着圆满和完美 ...

  10. python 画柱状图-Python 使用 matplotlib 画柱状图教程

    Python 使用 matplotlib 画图是非常方便的,之前的文章记录了<Python 使用 matplotlib 画折线图教程>,今天就再次记录一下使用 matplotlib 画柱状 ...

最新文章

  1. 《软件建模与设计: UML、用例、模式和软件体系结构》一一2.10 UML扩展机制
  2. 【转】【CUBE】Oracle分组函数之CUBE魅力
  3. jsp+servlet+mysql增删改查
  4. Java里的接口的interface 简单介绍.
  5. JS的parseInt
  6. python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据
  7. java的abstract的意思_java – spring中的abstract =“true”是什么意思?
  8. android studio如何编译测试,Android Studio 进行单元测试完整教程
  9. pycharm可视化数据库
  10. 现在论文用手写还是用计算机写,毕业论文计算机手写数字识别技术完整版.docx...
  11. java面向对象传播智客,传智播客java培训 java基础之javabean
  12. 图嵌入方法基础学习之Node2vec
  13. Typora下载连接及使用教学
  14. 防关联超级浏览器(超级防关联浏览器)的应用场景和技术原理
  15. R语言计算dataframe中指定数据列的值为缺失值的样本个数(行的个数)
  16. mern技术栈好处?_如何开始使用MERN堆栈
  17. XCTF-MFW Git泄露,命令执行漏洞 详解
  18. ISCC线下赛参赛感悟
  19. Java8-19新特性一览 ,认识全新的前沿技术
  20. 百度云分享文件自己设置密码

热门文章

  1. 路由器显示DNS服务器设置错误,路由器dns设置错误怎么处理
  2. 苹果手机怎么验证app_【图文】苹果手机如何下载安装APP
  3. 【Day4.3】大皇宫内蹭讲解
  4. python批量合并mp4视频
  5. 爬取豆瓣的战狼影评(cookies 云词)
  6. 尴尬!亚马逊的AI情绪识别软件竟然混淆情感表达
  7. 揭秘!谷歌云确立领先地位的五大变革
  8. 基于MI的cfc(交叉频率耦合)分析
  9. 在网页设计中如何排版
  10. TypeError: AMap.MouseTool is not a constructor TypeError: AMap.MouseTool is not a constructor