利用numpy+matplotlib绘图的基本操作教程

发布时间 - 2026-01-11 00:57:12    点击率:

简述

Matplotlib是一个基于python的2D画图库,能够用python脚本方便的画出折线图,直方图,功率谱图,散点图等常用图表,而且语法简单。具体介绍见matplot官网。

Numpy(Numeric Python)是一个模仿matlab的对python数值运算进行的扩展,提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生,而且据说自从他出现了以后,NASA就把很多原来用fortran和matlab做的工作交给了numpy来做了,可见其强大。。。他的官网在这里,具体的资料都在里面。

安装

$sudo apt-get install python-matplotlib
$sudo apt-get install python-numpy

使用

matplotlib可以在脚本中使用,不过如果在ipython中使用则会更加炫(直接添加–pylab参数可以免去导包的过程),而且能得到类似Matlab/Mathematica一样的功能,即时输入,即时输出。个人觉得说白了他就是模仿Matlab/Mathematica的,但是的确比前者更加方便编程。

很多情况下matplot需要配合numpy包一起用,关于numpy包我不打算分开来说,用到的时候提一下就行。有一点需要注意的是,numpy包通常是这样导入的:

import numpy as np

会给他起一个叫np的别名,而且这几乎已经是约定俗成了。

在python或者ipython中输入help(*需要查找的函数*) 就行(当然需要先导入下包)。

第一个图像

需要导入的包:

import numpy as np
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()

有matlab基础的同学肯定不陌生。。。是的,这两个模块的组合几乎就跟matlab的用法无二。。

      1、首先用np.linspace方法生成一个数组X,这个数组是从$-\pi$开始到$\pi$的总共包含256个元素的数组,endpoint参数表示是否包含首尾端点(他的值是True或False,首字母要大写。。。。)。当然,这个数组就是一个普通的数组了,跟其他数组没有区别。

      2、然后用np.cos()np.sin()方法作用在X数组上,对于X中的每一个元素进行计算,生成结果数组。(免去了迭代的过程)。

      3、接着调用pylab的plot方法,第一个参数是横坐标数组,第二个参数是纵坐标数组,其他参数暂且不谈。这样他会生成一个默认的图表了。(不会立刻显示)

      4、当然,最后还要调用show方法来显示图表。

      5、结果:

图表的名字叫figure1,左下面有几个按钮,都是很实用的东西,右下角会显示当前鼠标左边,也很方便。

图表布局和坐标分布

每一个图表都是在一个figure里面,我们可以通过如下命令生成一个空的figure:

figure(figsize=(8,6), dpi=80)

这里参数的顺序没有要求,但是一定要加上参数名,因为他是根据参数名来区别每个参数的,是一种跟C语言类型不同的函数。figsize参数表示figure的宽高比,然后dpi表示每一份占的长度,比如这里就表示图像是640x480的。

输出命令之后会立刻出现一个窗口,接下来所有的plot命令都会立刻显示在这个窗口上而不用再输入show命令了。

一个figure里也能显示多个图表,我们可以用如下函数来分割一个figure:

subplot(3,4,6)

这样就会把当前的figure分割成3行4列的表,而激活其中的第6张,即第2行第3张。以后的plot都是在这一个子表上生成的,如果需要更换则可以重新输入subplot命令来确定其新的位置。

除此之外,如果我们对图表显示的范围不满意,我们还可以直接调整图表的坐标范围:

xlim(-4.0,4.0)
ylim(-1.0,1.0)

这就表示x轴的范围设置在-4到4,y轴的范围设置在-1到1。当然,如果是想相对的进行修改我们可以利用下numpy数组的min和max方法。比如X.min() 这样的东西。

如果对坐标显示的密度啊什么的不满意,我们也可以调节他的标注点:

xticks(np.linspace(-4,4,9,endpoint=True))
yticks(np.linspace(-1,1,5,endpoint=True))

对于xticks和yticks,我们实际上可以传入任意的数组,这里不过是为了方便而用numpy快速生成的等差数列。

当然,我们也可以给标注点进行任意的命名,像下面这样:

xticks([1,2,3,4,5],['one','two','three','four','five'])

效果也很好想象,就不贴图了。需要注意的是这里也可以支持LaTex语法,将LaTex引用在两个$之间就可以了。(关于LaTex)

这里也有个小窍门,就是如果想不显示标注的话,我们就可以直接给xticks赋一个空的数组。

更改色彩和线宽

我们可以在画plot的时候用如下方法指定他的颜色和线宽:

plot(X, C, color='#cadae3', linestyle='-',linewidth=1.3, marker='o', markerfacecolor='blue', markersize=12,)

同样,这里参数的顺序不重要,名字才重要。

color参数可以指定RGB的色相,也可以用一些默认的名字,比如red blue之类的。

linestyle参数则指定了线的样式,具体参照以下样式:

参数样式
‘-‘实线
‘–’虚线
‘-.’线-点
‘:’点虚线

linewidth参数指定折线的宽度,是个浮点数。

marker参数指定散点的样式,具体参照以下样式:

参数样式
‘.’实心点
‘o’圆圈
‘,’一个像素点
‘x’叉号
‘+’十字
‘*’星号
‘^’ ‘v’ ‘<’ ‘>’三角形(上下左右)
‘1’ ‘2’ ‘3’ ‘4’三叉号(上下左右)

markerfacecolor参数指定marker的颜色

markersize参数指定marker的大小

这样就基本上能够自定义任何的折线图、散点图的样式了。

移动轴线

这段有点小复杂,暂时不想具体了解奇奇怪怪的函数调用,姑且先记录下用法和原理:

ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))

我们知道一张图有上下左右四个轴线,这里我们把右边和上边的轴线颜色调为透明,然后把下边设置到y轴数据为0的地方,把左边设置到x轴数据为0的地方。这样我们就能根据自己想要位置来调节轴线了。

比如下面这段官方的代码:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
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="-")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-")
plt.xlim(X.min()*1.1, X.max()*1.1)
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.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, 0, +1],
 [r'$-1$', r'$0$', r'$+1$'])
plt.show()

显示的结果就是:

图例和注解

图例十分简单,下述代码就可以解决:

plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine")
plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
legend(loc='upper left')

在plot里指定label属性就好了,最后调用下legend函数来确定图例的位置,一般就是’upper left’就好了。

注解就有点麻烦了,要用到annotate命令,挺复杂的,暂时是在不想看,姑且贴一段完整的代码和效果图吧:

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
plt.figure(figsize=(8,5), dpi=80)
ax = plt.subplot(111)
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
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="cosine")
plt.plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine")
plt.xlim(X.min()*1.1, X.max()*1.1)
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.ylim(C.min()*1.1,C.max()*1.1)
plt.yticks([-1, +1],
  [r'$-1$', r'$+1$'])
t = 2*np.pi/3
plt.plot([t,t],[0,np.cos(t)],
  color ='blue', linewidth=1.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([t,t],[0,np.sin(t)],
  color ='red', linewidth=1.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.legend(loc='upper left', frameon=False)
plt.savefig("../figures/exercice_9.png",dpi=72)
plt.show()

效果图:

还是十分高能的。。。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# numpy matplotlib  # matplotlib绘图教程  # matplotlib 绘图  # 都是  # 第一个  # 上下左右  # 的是  # 是一个  # 就可以  # 可以用  # 这段  # 我们可以  # 就行  # 不满意  # 需要注意  # 官网  # 等差数列  # 角形  # 就好了  # 是个  # 是在  # 在这里  # 很好 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: ,怎么在广州志愿者网站注册?  如何在云服务器上快速搭建个人网站?  制作电商网页,电商供应链怎么做?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何彻底删除建站之星生成的Banner?  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  iOS验证手机号的正则表达式  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  浅谈javascript alert和confirm的美化  Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】  iOS正则表达式验证手机号、邮箱、身份证号等  如何快速建站并高效导出源代码?  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  桂林网站制作公司有哪些,桂林马拉松怎么报名?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  如何快速搭建高效WAP手机网站吸引移动用户?  制作公司内部网站有哪些,内网如何建网站?  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel中的Facade(门面)到底是什么原理  如何解决hover在ie6中的兼容性问题  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  js实现点击每个li节点,都弹出其文本值及修改  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  如何快速生成凡客建站的专业级图册?  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程  如何快速打造个性化非模板自助建站?  教你用AI将一段旋律扩展成一首完整的曲子  深圳网站制作的公司有哪些,dido官方网站?  Android滚轮选择时间控件使用详解  网站制作企业,网站的banner和导航栏是指什么?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Python制作简易注册登录系统  HTML 中如何正确使用模板变量为元素的 name 属性赋值  为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  如何在IIS中配置站点IP、端口及主机头?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑