基于matplotlib的数据可视化 -
matplotlib.pyplot(as mp or as plt)提供基于python语言的绘图函数
引用方式: import matplotlib.pyplot as mp / as plt 本章内容拟按官方手册(NumPy Reference, Release 1.14.5 )中的 plt 形式
像matlab一样,matplotlib.pyplot是一些命令样式函数。
pyplot函数都可以创建图形、再图形中创建绘图区、再绘图区中画线、用标签装饰图形等操作。
在pyplot的函数调用中,隐藏了各种状态,这就意味着要始终跟踪到当前的图形和绘图区域,并且绘图函数要指向当前的坐标轴(注意这里的坐标轴是数字坐标轴,而不是严格意义的数学术语)。
1 plot
plot()函数是用来绘制二维图像的,
plot的广泛的定义为:
plot(*args, **kwargs)
此定义意味着plot()这一通用函数可以接受任意参数
args 和 kwargs 参数具体化
1.1 asgs参数
plot([x], y, [fmt], data=None, **kwargs)plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
x - 值是可选的,
y - 值是必选的,也就是说,当一个值时,默认为y
fmt - 用于定义基本格式化如颜色、标记和直线样式的shortcut string
注:可以增加多个Y值,及其相关基本格式化shortcut string
示例1
import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) plt.show() # 不写此语句,则图像存在于内存中,不会输出到显示器上

示例2 没有x轴时
import matplotlib.pyplot as plt # x = [1, 2, 3, 4] y = [1, 4, 9, 16] plt.plot(y) plt.show()

当仅给plot()的args参数提供一个列表/数组时,则默认为y,此时缺省x;x轴上的数值是自动生成的,x轴上的值是默认从0开始,且x上的长度值与y轴一致,所以此时x轴上的值为[0, 1, 2, 3]
示例3
import matplotlib.pyplot as plt #args参数 ‘bo’ 格式化了图形形式 plt.plot([1, 2, 3, 4], [1, 4, 9, 16],'bo') plt.show()

在plot()函数中,默认为绿色实线,对应格式字符串为‘b-’;实际上,标示线条颜色和类型的格式串来自于matlab。
另外还有一些其他格式字符串来控制线条样式或标记
字符 描述'-' 实线 '--' 虚线 '-.' 点与线 ':' 点 '.' 点标记 ',' 像素标记 'o' 圆圈标记 'v' 倒三角标记 '^' 正三角标记 '<' 左三角标记 '>' 右三角标记 ' 向下Y标记 ' 向上Y标记 ' 向左Y标记 ' 向右Y标记 's' 正方形标记 'p' 五角星标记 '*' *标记 'h' 六边形1 标记 'H' 六边形2 标记 '+' +标记 'x' x标记 'D' 钻石标记 'd' 薄砖石标记 '|' 垂直线标记 '_' 水平线标记
在默认格式字符串中,‘b-’ 中的 ‘-’ 表示实线,前面的字母 ‘b’ 则表示颜色
颜色相关的格式字符串及描述
字符 描述 ‘b’ blue(蓝色) ‘g’ green(绿色) ‘r’ red(红色) ‘c’ cyan(青色) ‘m’ magenta(品红) ‘y’ yellow(黄色) ‘k’ black(黑色) ‘w’ white(白色)
除了常见的颜色缩写外,还有RGB / RGBA颜色元组((0,1,0,1)),或者灰度强度作为字符串( ‘ 0.8 ’ ),或者十六进制字符串(‘#0080000’)
如果不使用上述简写格式字符,也可以采用kwargs字典参数形式进行控制
1.2 kwargs参数
在一定程度上,kwargs参数与args参数是等效的。如下示例所示
示例1
import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 4, 9, 16] plt.plot(x,y,'go--',linewidth = 2, markersize = 12) # plt.plot(x, y, color='green', marker='o', linestyle='dashed',linewidth=2, markersize=12) plt.show()
在示例中,采用 args 和 kwargs 的打印效果是一样的

在控制线条属性中,可以使用关键字参数进行设置
plt.plot(x, y, linewidth=2.0)
使用Line2D对象的setter方法,plot函数返回Line2D对象列表,例如 line1, line2 = plot(x1, y1, x2, y2) ,
import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 4, 9, 16] L1,L2 = plt.plot(x,y,y,x,linewidth = 3) print(L1) # Line2D(_line0) print(type(L1)) # <class 'matplotlib.lines.Line2D'> print(L2) # Line2D(_line1) plt.show()
在下段代码中,假设只有一行,因此返回的列表长度为1,使用元组来拆开line,并获取到列表的第一个元素。
import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 4, 9, 16] line, = plt.plot(x,y,'-') # 记得添加逗号, # 否则会报错AttributeError: # 'list' object has no attribute 'set_antialiased' # 也就意味plot返回的是数组list, # 使用setter方法,则返回的是Line2D对象 line.set_antialiased(False) # turn off antialising plt.show()
使用 setp() 命令,实现一行设置多个属性,采用一个或一组对象可以使 setp 工作更加 transparently(明亮地,显然地,易觉察地)
import matplotlib.pyplot as plt x = [1, 2, 3, 4] y = [1, 4, 9, 16] lines = plt.plot(x, y, x, y) # use keyword args plt.setp(lines, color='r', linewidth=2.0) plt.show()
采用 MATLAB 形式的键值对也可,此处略。
1.3 Line2D属性
在xdata、ydata序列中创建带有x、y数据的Line2D实例。
详细参数见 matplotlib.lines.Line2D,里面有针对每一个参数的详细讲解
| Property | Description |
|---|---|
agg_filter |
a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array |
alpha |
float (0.0 transparent through 1.0 opaque) |
animated |
bool |
antialiased or aa |
bool |
clip_box |
a Bbox instance |
clip_on |
bool |
clip_path |
[(Path, Transform) | Patch | None] |
color or c |
any matplotlib color |
contains |
a callable function |
dash_capstyle |
[‘butt’ | ‘round’ | ‘projecting’] |
dash_joinstyle |
[‘miter’ | ‘round’ | ‘bevel’] |
dashes |
sequence of on/off ink in points |
drawstyle |
[‘default’ | ‘steps’ | ‘steps-pre’ | ‘steps-mid’ | ‘steps-post’] |
figure |
a Figure instance |
fillstyle |
[‘full’ | ‘left’ | ‘right’ | ‘bottom’ | ‘top’ | ‘none’] |
gid |
an id string |
label |
object |
linestyle or ls |
[‘solid’ | ‘dashed’, ‘dashdot’, ‘dotted’ | (offset, on-off-dash-seq) | '-' | '--' | '-.' | ':' | 'None' | ' ' | ''] |
linewidth or lw |
float value in points |
marker |
A valid marker style |
markeredgecolor or mec |
any matplotlib color |
markeredgewidth or mew |
float value in points |
markerfacecolor or mfc |
any matplotlib color |
markerfacecoloralt or mfcalt |
any matplotlib color |
markersize or ms |
float |
markevery |
[None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float] |
path_effects |
AbstractPathEffect |
picker |
float distance in points or callable pick function fn(artist, event) |
pickradius |
float distance in points |
rasterized |
bool or None |
sketch_params |
(scale: float, length: float, randomness: float) |
snap |
bool or None |
solid_capstyle |
[‘butt’ | ‘round’ | ‘projecting’] |
solid_joinstyle |
[‘miter’ | ‘round’ | ‘bevel’] |
transform |
a matplotlib.transforms.Transform instance |
url |
a url string |
visible |
bool |
xdata |
1D array |
ydata |
1D array |
zorder |
float |
2 多图和多坐标轴
matlab、pyplot都有当前图和当前坐标轴的概念,所有的绘图命令都应用于当前轴。
函数gca()返回当前轴,get current axes
函数gcf()返回当前图,get current figure
import numpy as np
import matplotlib.pyplot as plt
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

10行 figure()命令是可选的,
这儿的figure()命令是可选的,因为figure(1)会被默认执行,就像subplot(111)也会被默认执行,只要你不手动定义任何的坐标轴。subplot()命令指定行数(numrows)、列数(numcols)、图形号(fignum),图形号的范围是从1到numrows*numcols。如果numrows*numcols<10,subplot()参数里的逗号是可选的。所以subplot(211)等同于subplot(2, 1, 1)。你可以创建任意数量的子图和坐标轴。如果你想手动放置坐标轴,例如不在一个直角网格里,可以使用axes()命令,axes可以让你给坐标轴定义位置,像axes([left, bottom, width, height]),参数都是小数(0-1)坐标。两个例子:
基于matplotlib的数据可视化 -的更多相关文章
- 基于matplotlib的数据可视化 - 笔记
1 基本绘图 在plot()函数中只有x,y两个量时. import numpy as np import matplotlib.pyplot as plt # 生成曲线上各个点的x,y坐标,然后用一 ...
- 基于matplotlib的数据可视化 - 饼状图pie
绘制饼状图的基本语法 创建数组 x 的饼图,每个楔形的面积由 x / sum(x) 决定: 若 sum(x) < 1,则 x 数组不会被标准化,x 值即为楔形区域面积占比.注意,该种情况会出现 ...
- 基于matplotlib的数据可视化 - 热图imshow
热图: Display an image on the axes. 可以用来比较两个矩阵的相似程度 mp.imshow(z, cmap=颜色映射,origin=垂直轴向) imshow( X, cma ...
- 基于matplotlib的数据可视化 - 等高线 contour 与 contourf
contour 与contourf 是绘制等高线的利器. contour - 绘制等高线 contourf - 填充等高线 两个的返回值值是一样的(return values are the sam ...
- 基于matplotlib的数据可视化 - 三维曲面图gca
1 语法 ax = plt.gca(projection='3d')ax.plot_surface(x,y,z,rstride=行步距,cstride=列步距,cmap=颜色映射) gca(**kwa ...
- 基于matplotlib的数据可视化 - 柱状图bar
柱状图bar 柱状图常用表现形式为: plt.bar(水平坐标数组,高度数组,宽度比例,ec=勾边色,c=填充色,label=图例标签) 注:当高度值为负数时,柱形向下 1 语法 bar(*args, ...
- 基于matplotlib的数据可视化(图形填充fill fill_between) - 笔记(二)
区域填充函数有 fill(*args, **kwargs) 和fill_between() 1 绘制填充多边形fill() 1.1 语法结构 fill(*args, **kwargs) args - ...
- matplotlib实现数据可视化
一篇matplotlib库的学习博文.matplotlib对于数据可视化非常重要,它完全封装了MatLab的所有API,在python的环境下和Python的语法一起使用更是相得益彰. 一.库的安装和 ...
- 使用 jupyter-notebook + python + matplotlib 进行数据可视化
上次用 python 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...
随机推荐
- HighCharts设置图表背景透明
其实就一句话: backgroundColor: 'rgba(0,0,0,0)' 完整示例: $(function () { $('#container').highcharts({ chart: { ...
- [Javascript] Check both prop exists and value is valid
Sometime you need to check one prop exists on the object and value should not be ´null´ or ´undefine ...
- ASP入门(十二)-Application对象
在一起协同工作以完成某项任务的一组ASP文件称为一个应用程序.Application 对象用于把这些文件捆绑在一起. Application 对象用于在整个应用程序生存期间保存信息. Applicat ...
- js - object.assign 以及浅、深拷贝
浅(引用)拷贝:共用同一内存地址,你改值我也变 譬如常用的对象赋值操作 深拷贝:深拷贝即创建新的内存地址保存值(互不影响) 譬如以下 const shallBasicCopy = obj => ...
- linux2.6.30.4内核移植(3)——yaffs文件系统移植
内核源码:linux2.6.30.4 交叉编译工具:3.4.5 移植linux内核至:TQ2440 工作基础:http://www.cnblogs.com/nufangrensheng/p/36696 ...
- NGINX源码分析——概览
一.概况 Nginx可以开启多个进程,每个进程拥有最大上限128个子线程以及一定的可用连接数.最大客户端连接数等于进程数与连接数的乘积,连接是在主进程中初始化的,一开始所有连接处于空闲状态.每一个客户 ...
- eclipse 运行简单JAVA程序事例
开发JAVA已经有一段时间了,不过要运行JAVA程序,还是在命令行敲命令,很不方便,很麻烦,突然想到eclipse应该也有这个功能,于是百度了一下,将步骤晒出来,供大家参考. 1.创建JAVA工程 单 ...
- 连通性问题--Algorithms IN C读书笔记
近期在看<Algorithms IN C>这本书.刚開始看,读的是英文版的.感觉作者的叙述有点不太easy理解.就找了一本中文版的来看,发现还是看英文版的比較好.先看了第一章的大部分,后面 ...
- QT Creator 环境使用 remote debug 调试 arm 程序
这里使用的 4.8.5 QTE 环境,之前尝试过远程使用 GDB 来调试板子上的 QT 程序,但是没成功.没有调试手段比较痛苦,今天又花了点时间,居然搞定了.粗做记录. 工具版本: 1. QtCrea ...
- 字符串匹配算法——BF、KMP、Sunday
一:Brute force 从源串的第一个字符开始扫描,逐一与模式串的对应字符进行匹配,若该组字符匹配,则检测下一组字符,如遇失配,则退回到源串的第二个字符,重复上述步骤,直到整个模式串在源串中找到匹 ...