[Machine Learning]matplotlib
2015-11-17 16:45
549 查看
matplotlib是python最著名的绘图库,它提供了一整套和MATLAB类似的绘图函数集。
一. 快速绘图
1. 使用pyplot模块绘图
pyplot模块提供了快速绘制二维图表的API,例子:
2. 以面向对象方式绘图
matplotlib所绘制的图标中每一个绘图元素都是一个对象:
3. 配置属性
使用matplotlib绘制的图表的每个组成部分都和一个对象对应,可以通过调用这些对象的属性设置方法set_*()或者pyplot模块的属性设置函数setp()来设置它们的属性值。
可以用get_*()和plt.getp()获取对象属性。
4. 绘制多个子图
一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘制区域(子图)。可以用subplot()快速绘制包含多个子图的图表:
如果希望某个子图占据整行或者整列:
subplot()返回所创建的Axes对象,可以保存起来,然后用sca()交替让它们成为当前Axes对象:
二. Artist对象
matplotlib是一套面向对象的绘图库,它有三个层次:
backend_bases.FigureCanvas:图表的绘制领域;
backend_bases.Renderer: 知道如何在FigureCanvas对象上绘图;
artist.Artist:知道如何使用Renderer在FigureCanvas对象上绘图;
我们只需和Artist打交道,Artist对象分为简单类型和容器类型两种,简单类型的Artist对象是标准的绘图元件,例如Line2D, Reactangle, Text等,而容器类型包括许多简单类型的Artist, 使它们成为一个整体。直接创建Artist对象进行绘图的流程如下:
创建Figure对象;
为Figure对象创建一个或者多个Axes对象;
调用Axes对象的方法创建各种简单类型的Artist对象;
1. Artist对象的属性
以上是Artist对象的属性,可以通过set_*()或者get_*()设置和获取。
一. 快速绘图
1. 使用pyplot模块绘图
pyplot模块提供了快速绘制二维图表的API,例子:
# -*- coding: utf-8 -*- """ 绘制简单的曲线。 """ import numpy as np import matplotlib.pyplot as plt #导入pyplot模块 x = np.linspace(0, 10, 1000) y = np.sin(x) z = np.cos(x**2) #创建一个Figure对象, figsize指定Figure对象的宽度和高度, 单位英寸 plt.figure(figsize=(8,4)) # 调用plot()函数在当前Figure对象上绘图 # 指定X, Y轴数据 # label: 给曲线指定一个标签名称, 前后的'$'使标签用LaTex引擎来显示文字 # color: 曲线的颜色 # linewidth(lw): 曲线宽度 plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2) # 使用"b--"指定曲线的颜色和线型,b表示蓝色, '--'表示虚线 plt.plot(x,z,"b--",label="$cos(x^2)$") # X, Y轴标题文字 plt.xlabel("Time(s)") plt.ylabel("Volt") # 标题 plt.title("PyPlot First Example") # Y轴范围 plt.ylim(-1.2,1.2) # 显示图示, 即图中表示每条曲线的标签和样式的矩形区域 plt.legend() # 显示绘图窗口 plt.show()
PyPlot First Example的显示效果 可以调用savefig()批量保存图片:
plt.savefig("test.png", dpi=120)
2. 以面向对象方式绘图
matplotlib所绘制的图标中每一个绘图元素都是一个对象:
#获取当前图标, Get Current Figure fig = plt.gcf() #获取当前子图,Get Current Axes axes = plt.gca()
3. 配置属性
使用matplotlib绘制的图表的每个组成部分都和一个对象对应,可以通过调用这些对象的属性设置方法set_*()或者pyplot模块的属性设置函数setp()来设置它们的属性值。
x = np.arange(0, 5, 0.1) line = plt.plot(x, x * x)[0] line.set_antialiased(False) #取消反锯齿效果
# 同时绘制正弦余弦曲线 lines = plt.plot(x, np.sin(x), x, np.cos(x)) # 同时配置多个对象的属性 plt.setp(lines, color= 'r', linewidth = 2.0)
可以用get_*()和plt.getp()获取对象属性。
4. 绘制多个子图
一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘制区域(子图)。可以用subplot()快速绘制包含多个子图的图表:
# 图表的整个绘制区域被等分为numRows行和numCols列 # plotNum参数指定创建的Axes对象所在的区域 subplot(numRows, numCols, plotNum)
for idx, color in enumerate("rgbyck"): plt.subplot(321 + idx, axisbg = color) plt.show()
如果希望某个子图占据整行或者整列:
plt.subplot(221) plt.subplot(222) plt.subplot(212) plt.show()
subplot()返回所创建的Axes对象,可以保存起来,然后用sca()交替让它们成为当前Axes对象:
#-*- coding:utf8 import numpy as np import matplotlib.pyplot as plt plt.figure(1) # 创建图表1 plt.figure(2) # 创建图表2 ax1 = plt.subplot(211) # 在图表2中创建子图1 ax2 = plt.subplot(212) # 在图表2中创建子图2 x = np.linspace(0, 3, 100) for i in xrange(5): plt.figure(1) # 选中图表1 plt.plot(x, np.exp(i * x / 3)) plt.sca(ax1) # 在图表2中选中子图1 plt.plot(x, np.sin(i * x)) plt.sca(ax2) # 在图表2中选中子图2 plt.plot(x, np.cos(i * x)) plt.show()
二. Artist对象
matplotlib是一套面向对象的绘图库,它有三个层次:
backend_bases.FigureCanvas:图表的绘制领域;
backend_bases.Renderer: 知道如何在FigureCanvas对象上绘图;
artist.Artist:知道如何使用Renderer在FigureCanvas对象上绘图;
我们只需和Artist打交道,Artist对象分为简单类型和容器类型两种,简单类型的Artist对象是标准的绘图元件,例如Line2D, Reactangle, Text等,而容器类型包括许多简单类型的Artist, 使它们成为一个整体。直接创建Artist对象进行绘图的流程如下:
创建Figure对象;
为Figure对象创建一个或者多个Axes对象;
调用Axes对象的方法创建各种简单类型的Artist对象;
1. Artist对象的属性
fig = plt.figure() plt.show() fig.patch.set_color("g") # 设置背景色为绿色 fig.canvas.draw() #重绘界面
alpha:透明度, 值在0~1之间; animated: 布尔值,绘制动画效果时使用; axes: 拥有此Artist对象的Axes对象,可能为None; clip_box:对象的裁剪框; clip_on:是否裁剪; clip_path:裁剪路径; contains:判断指定点是否在对象之上的函数; figure:拥有此Artist的Figure对象,可能为None; label:文本标签; picker:控制Artist对象的选取; transform:控制偏移,旋转,缩放等坐标变换; visible:是否可见; zorder:控制绘图顺序
以上是Artist对象的属性,可以通过set_*()或者get_*()设置和获取。
相关文章推荐
- ****使用ftp软件上传下载php文件时换行符丢失bug
- js+ajax+php
- Cannot send session cache limiter
- PHP 获取日期的星期
- Windows Server 2008 R2(x64) IIS7+PHP5(FastCGI)环境搭建
- PHP正则表达式基础入门
- php进阶
- MAC搭建 PHP 环境
- php生成二维码
- Warning: session_start(): Cannot send session cookie - headers already sent by
- ThinkPHP实现支付宝接口功能
- ecmobile,EC_PATH未定義,init.php加載失敗,解決方案
- PHP 命名空间的简介
- Yii框架分布式缓存的实现方案
- yii2 url 重写 自定义url
- PhpExcel
- php分享十一:PHP实现异步调用方法研究
- php+ajax无刷新上传图片实例代码
- 使用xdebug分析thinkphp框架函数调用图
- PHP中魔术常量