Matplotlib 简明教程(一): 从上手到解决具体需求--任意函数表达式极值的结果可视化

Matplotlib简介

Matplotlib 是 Python 从 Matlab 迁移过来的一个 2D 绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形,通过几行代码,就能开发出直方图、饼状图、散点图、三维图等各式各样的专业图表,具有极强的自定义性和可扩展性。下面是 Matplotlib 官网的几个示例图表:

在这里插入图片描述在这里插入图片描述

同时由于 Matplotlib 是基于 NumPy (一个科学计算包)和 tkinter (一个图形框架) 二次开发的,Matplotlib 在科学计算结果可视化领域越来越受到欢迎。

Matplotlib组成

  • figure:整个画布,包含一个或多个 axes
  • axes:画布中的某一个图表,包含一个 plot
  • artist:元素,包括图中所示的 label、line 等,也包括 plot
    • ![此张图片摘自互联网](https://img-blog.csdnimg.cn/20190123183131790.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3lnZHh0,size_16,color_FFFFFF,t_70)

不得不说的 backend

backend是为matplotlib中的绘图功能做幕后工作的,对应的’frontend’指的就是你编辑的绘图命令。通过设置’backend’可以使得matplotlib适应不同的应用场景,或者说输出形式,例如:python中的命令行模式下弹出的figure,图形界面的工具wxpython中嵌入的matplotlib,网页应用服务,批处理脚本生成可视化数据等。
backend可以分为两类:交互式的,包括命令行以及图形界面的集成开发环境;非交互式的,比如输出图片文件(格式为PNG,JPG,PDF等)的。

常见的backend类型:

不可交互型可交互型
AGG:渲染为 png 文件Qt5Agg:使用 Qt5 渲染,IPython 中可使用 %matplotlib qt5
PS:渲染为 ps 文件macosx:使用 Cocoa 画布渲染,Ipython 中可使用 %matplotlib osx
PDF:渲染为 pdf 文件nbAgg:Jupyter Notebook 中使用的 backend,Jupyter 中使用 %matplotlib notebook 来激活
SVG:渲染为 svg 文件WXAgg:使用 wxWidgets 库来渲染,Ipython 中可使用 %matplotlib wx

假如我们要激活 WXAgg 渲染模式,可以使用

import matplotlib
matplotlib.use(‘WXAgg’)

注意激活语句最后紧跟着导入语句,中间不能有 plt.plot() 之类的绘图语句

Matplotlib基本用法

由于Matplotlib是第三方库,请先确保你的电脑上已经安装成功 Matplotlib 库;
一般有下面两种办法:

  1. 在命令行下输入: pip install matplotlib
  2. 通过下载whl文件安装,可以参考:

通过whl文件安装第三方库

导入

根据开源社区的习惯,一般这样导入

import matplotlib.pyplot as plt

创建画布

plt.figure()

如果在 plt.figure() 后直接 plt.show(),将弹出一个空白图表的画布窗口

具体绘图

Matplotlib 的绘图是面向过程的,具体的绘图操作差不多都在这一步完成,比如我想在一个子图中绘制出sin(x) 和cos(x) ,控制代码如下:

x = np.arange(0,np.pi*2,0.01)
y1 = np.sin(x)
y2 = np.cos(x)
#下面两句代码可以简化为一句代码:
#plt.plot(x,y1,x,y2)
plt.plot(x,y1)
plt.plot(x,y2)

plt.show() 之后,其效果图如下:

在这里插入图片描述

plot() 函数只是 Matplotlib 库中最简单的绘图函数,除了横坐标x、纵坐标y外,它还可以通过关键字参数c(color) 控制线条的颜色,比如plt.plot(x,y1,c="y")可以使上图中曲线 sin(x) 的颜色变成黄色,通过关键字参数s(size) 控制线条的粗细等,有具体需求的时候可以查对应的的 API 手册。

pyplot 模块中其他一些重要的绘制函数列表如下:

名称功能
plt.hist()画直方图
plt.scatter()画散点图
plt.bar()画柱形图
plt.annotate()给图像加注释

注:绘图部分由于 API 过多,在此仅列出基础函数,后面我会视情况专门出一个针对此部分的教程

显示

plt.show()

将整个画布以及上面的子图显示出来。

一个 Matplotlib 实例

假设我们现在要解决一个需求:

求任意多项式函数的极值并将计算结果可视化

其中函数计算用到了第三方库 sympy ,感兴趣的同学可以先学习,有不懂的地方可以通过邮件联系我;否则可以忽略,我们的注意力放在绘图部分

解决代码

# -*- coding: utf-8 -*-
# author:           inspurer(月小水长)
# pc_type           lenovo
# create_date:      2019/1/23
# file_name:        my_differ
# qq_mail			2391527690@qq.com
# 安装的时候出现Proxy错误记得关代理
from sympy import *
import numpy as np
import matplotlib.pyplot as plt

# 声明符号 x
x = Symbol("x")

def count_extreme(express):
	# 声明 y 表达式
	y = express
	# y 对 x 求导
	dy = diff(y,x)
	# 返回导函数的零点
	extreme_x_list = solve(dy,x)
	if len(extreme_x_list)==0:
		return "no extrem vaule"
	print(extreme_x_list)
	# 声明定义域
	plt.figure()
	plt.xlabel("X")
	# 标签里面必须添加字体变量:fontproperties='SimHei',fontsize=14。不然中文显示可能会乱码
	plt.ylabel("Y轴",fontproperties='SimHei',fontsize=14)
	defined_x = np.arange(-5,5,0.01)
	defined_y = 1/3*defined_x**3-3/2*defined_x**2+2*defined_x
	plt.title("y = 1/3*x**3-3/2*x**2+2*x")
	plt.plot(defined_x,defined_y)
	for i,extreme_x in enumerate(extreme_x_list):
		extreme_y = y.evalf(subs={x:extreme_x})
		plt.scatter(extreme_x,extreme_y,s=50,c="red")
		#  xytext -- 为注解内容位置坐标,当该值为None时,注解内容放置在xy处
		#  xycoords and textcoords 是坐标xy与xytext的说明,若textcoords=None,则默认textNone与xycoords相同,
		#  若都未设置,默认为data,
		#  arrowprops 用于设置箭头的形状,类型为字典类型
		plt.annotate('y(%.4s)=%.4s' % (extreme_x,extreme_y), xy=(extreme_x, extreme_y), xycoords='data', xytext=((-1)**(i+1)*30, (-1)**(i+1)*30),
					 textcoords='offset points', fontsize=16,
					 arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
	plt.show()


if __name__ == "__main__":
	count_extreme(1/3*x**3-3/2*x**2+2*x)

可视化结果

其中函数表达式是以y = 1/3*x**3-3/2*x**2+2*x为例的,可以在代码的最后一行自定义修改
在这里插入图片描述

参考了博客:
https://blog.csdn.net/xiaoqu001/article/details/78726735

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
学习Python的爬虫、数据分析和可视化可以帮助我们更好地理解和利用网络上的数据资源。对于零基础的学习者来说,从入门到精通需要进行一系列的学习和实践。 首先,我们需要了解Python编程的基础知识,如变量、函数、流程控制和数据结构等。可以通过阅读教材、参加在线课程或观看视频教程等途径来学习这些基础知识。 接下来,我们可以学习网络爬虫的基本原理和技巧。网络爬虫是用于自动获取互联网上的数据的程序,通过发送HTTP请求和解析HTML等网页内容来实现。可以学习如何使用Python的库(如requests、beautifulsoup等)和工具(如XPath、正则表达式等)来编写爬虫程序,并通过实践来熟练掌握。 一旦我们能够爬取到所需的数据,下一步就是进行数据分析和可视化。数据分析是通过统计和处理数据来获取有用信息的过程,可以使用Python的库(如pandas、numpy等)来处理和分析数据。数据可视化则是将数据通过图表、图形等方式展示出来,有助于更直观地理解和传达数据。Python的matplotlib和seaborn等库可以用于数据可视化。 为了从入门到精通,除了学习基础知识和技术,还需要进行大量的实践。可以通过找一些合适的练习项目来锻炼自己的编程和数据处理能力,同时可以参与一些开源项目,与其他开发者进行交流和学习。 总之,学习Python爬虫、数据分析和可视化需要一定的时间和耐心,但通过系统学习和不断实践,我们可以逐渐提升自己的技能,从入门到精通。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月小水长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值