通过Matplotlib画sin(x)
通过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)相关推荐
- python 画三维函数图-如何用Matplotlib 画三维图的示例代码
最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...
- python画三维立体图-如何用Matplotlib 画三维图的示例代码
用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...
- python怎样画立体图-如何用Matplotlib 画三维图的示例代码
用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...
- Matplotlib画动态散点图:
Matplotlib画动态散点图: X=np.random.randint(0,512,20).tolist() Y=np.random.randint(0,512,20).tolist() pri ...
- python画三维立体图完整代码_如何用Matplotlib 画三维图的示例代码
最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...
- python绘制三维地形图_如何用Matplotlib 画三维图的示例代码
用Matplotlib画三维图 最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平 ...
- python matplotlib画球
matplotlib画球 1. 效果 2. 代码 3.参考链接 1. 效果 2. 代码 import matplotlib.pyplot as plt import numpy as npdef hu ...
- python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例
python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...
- 用Python的turtle和matplotlib画出圆满和爱心
马上就要到六一儿童节了,小朋友很喜欢画画,这里就用Pyhton来画一些简单形状. 首先是圆形,圆形的寓意是圆满.完美.团圆.优胜和团结.圆形在形状上是一个平面中点到定点距离相等的图形,象征着圆满和完美 ...
- python 画柱状图-Python 使用 matplotlib 画柱状图教程
Python 使用 matplotlib 画图是非常方便的,之前的文章记录了<Python 使用 matplotlib 画折线图教程>,今天就再次记录一下使用 matplotlib 画柱状 ...
最新文章
- 《软件建模与设计: UML、用例、模式和软件体系结构》一一2.10 UML扩展机制
- 【转】【CUBE】Oracle分组函数之CUBE魅力
- jsp+servlet+mysql增删改查
- Java里的接口的interface 简单介绍.
- JS的parseInt
- python读取excel生成mysql建表语句_python读取excel文件并自动在mysql中建表导数据
- java的abstract的意思_java – spring中的abstract =“true”是什么意思?
- android studio如何编译测试,Android Studio 进行单元测试完整教程
- pycharm可视化数据库
- 现在论文用手写还是用计算机写,毕业论文计算机手写数字识别技术完整版.docx...
- java面向对象传播智客,传智播客java培训 java基础之javabean
- 图嵌入方法基础学习之Node2vec
- Typora下载连接及使用教学
- 防关联超级浏览器(超级防关联浏览器)的应用场景和技术原理
- R语言计算dataframe中指定数据列的值为缺失值的样本个数(行的个数)
- mern技术栈好处?_如何开始使用MERN堆栈
- XCTF-MFW Git泄露,命令执行漏洞 详解
- ISCC线下赛参赛感悟
- Java8-19新特性一览 ,认识全新的前沿技术
- 百度云分享文件自己设置密码
热门文章
- 路由器显示DNS服务器设置错误,路由器dns设置错误怎么处理
- 苹果手机怎么验证app_【图文】苹果手机如何下载安装APP
- 【Day4.3】大皇宫内蹭讲解
- python批量合并mp4视频
- 爬取豆瓣的战狼影评(cookies 云词)
- 尴尬!亚马逊的AI情绪识别软件竟然混淆情感表达
- 揭秘!谷歌云确立领先地位的五大变革
- 基于MI的cfc(交叉频率耦合)分析
- 在网页设计中如何排版
- TypeError: AMap.MouseTool is not a constructor TypeError: AMap.MouseTool is not a constructor