基于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 脚本中定期查询数据库,监视订单变化,将时间与处理完成订单的数量进行输入写入日志,虽然省掉了人为定时查看数据库并记录的操作,但是数据不进行分析只是数据,要让数据活起来! 为了方便看 ...
随机推荐
- TCP/IP具体解释学习笔记--TCP的超时与重传
1.基本概念 TCP之所以能够安全的将数据在传输中的安全性,是因为它每次给对方发送数据,都会等待对方给个确认,当长时间收不到这个确认,发送端就会重发这个数据. 2.超时时间的測量 要測超时时间,TCP ...
- 解决CentOS下无法发送邮件的问题
最近有个项目从虚拟主机迁到云主机上,换了个环境,原来用于找回密码的发送邮件功能竟然用不了了!反应极慢,导致tenginx报504网关超时错误. 5.5 or 7.0, sockets 初次百度,看了别 ...
- Android 基本 Jackson Marshalling(serialize)/Unmarshalling(deserialize)
本文内容 基本 Jack Marshalling 忽略属性 忽略 Null 字段 改变字段名字 基本 Jackson Marshalling 把 JSON 解析成 JsonNode Unmarshal ...
- Android 自定义 ListView 上下拉动刷新最新和加载更多
本文内容 开发环境 演示上下拉动刷新最新和加载更多 ListView 参考资料 本文演示上下拉动,刷新最新和加载更多,这个效果很常见,比如,新闻资讯类 APP,当向下拉动时,加载最新的资讯:向上拉动时 ...
- Solidworks公司电脑图纸被加密之后如何解密输出
第一步:打开总装配的组件(该组件需要包含你所有需要的零件),比如打开其中一个: 第二步:Solidworks的菜单中依次:"文件"→"打包"(有的版本是pa ...
- Discuz常见小问题-如何批量加精,置顶帖子
批量选中帖子,然后置顶和精华都可以勾选 完成之后的效果
- 基于redis分布式缓存实现(新浪微博案例)转
第一:Redis 是什么? Redis是基于内存.可持久化的日志型.Key-Value数据库 高性能存储系统,并提供多种语言的API. 第二:出现背景 数据结构(Data Structure)需求越来 ...
- 【iOS开发】如何用 Swift 语言进行LBS应用的开发?
本文分为三部分,第一部分详解用Swift语言开发LBS应用,并给出完整的示例与源代码:第二部分介绍如何申请LBS密钥,第三部分是综合示例查看,扫描二维码即可查看示例demo. 第一部分 使用Swift ...
- MySQL排序:SELECT ORDER BY
SELECT 和ORDER BY结合进行排序: products表例如以下: a 按产品名称列进行排序: b 按多个列进行排序,默认排序顺序为升序: c 指定排序方向,即指定为降序: d 对多个列进行 ...
- Android为ViewPager添加切换动画——自己定义ViewPager
转载请注明出处:http://blog.csdn.net/allen315410/article/details/44224517 在上篇博客中,我写了一个使用属性动画为ViewPager加入切换动画 ...