注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结。今天终于有时间来完成这个计划了!
0. Python中常用的可视化工具
Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用、接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分。在Python中,使用的最多的数据可视化工具是matplotlib,除此之外还有很多其他可选的可视化工具包,主要包括以下几大类:
- matplotlib以及基于matplotlib开发的工具包:pandas中的封装matplotlib API的画图功能,seaborn,networkx等;
- 基于JavaScript和d3.js开发的可视化工具:plotly等,这类工具可以显示动态图且具有一定的交互性;
- 其他提供了Python调用接口的可视化工具:OpenGL, GraphViz等,这一类工具各有特点且在特定领域应用广泛.
对于数据科学,用的比较多的是matplotlib和seaborn,对数据进行动态或交互式展示时会用到plotly.
1. matplotlib与MATLAB
Matplotlib是建立在NumPy数组基础上的多平台数据可视化程序库,John Hunter在2002年提出了matplotlib的初步构想——在Python中画出类似MATLAB风格的交互式图形。鉴于此种渊源,类似MATLAB风格的画图接口是matplotlib的两种画图接口之一。这类接口直观、便捷,许多语法与MATLAB类似,也是初学者常用的方式。
这种接口最重要的特性是有状态的(stateful):它会持续跟踪"当前的"图形和坐标轴,所有plt命令都可以应用。可以用plt.gcf()(获取当前图形)和plt.gca()(获取当前坐标轴)来查看具体信息。
matplotlib画图的基本设置:
import matplotlib as mpl
import matplotlib.pyplot as plt
mpl.rcParams['axes.linewidth'] = 1.5 #set the value globally, 设置坐标轴线宽
import seaborn as sns
sns.set() # 使用seaborn设置绘图风格
更多自定义设置可以参考官方文档:Customizing matplotlib
下面使用MATLAB风格画图,对一组分类变量(categorical variables)进行可视化
names = ['group_a', 'group_b', 'group_c'] # 不同分类的名称
values = [1, 10, 100] # 不同分类对应的值 plt.figure(1, figsize=(9, 3)) # 设置图片大小 plt.subplot(131) # 1x3, 第一个子图
plt.bar(names, values) # 柱状图
plt.subplot(132) # 1x3, 第二个子图
plt.scatter(names, values) # 散点图
plt.subplot(133) # 1x3, 第三个子图
plt.plot(names, values) # 折线图
plt.suptitle('Categorical Plotting') # 图片的标题
# w_pad设置子图之间的间隔宽度;rect设置整个图像部分(矩形)的左上点坐标和右下点坐标,默认值为[0, 0, 1, 1]
plt.tight_layout(w_pad=0.1, rect=[0, 0.03, 1, 0.95])
plt.savefig('demo1.png', dpi=200) # 保存图片
图片如下:
图1:分类变量的可视化
这种方式画图非常直观,每一步都对"plt"对象有一个特定的操作,画图的过程至上而下,画好之后保存图片。其他命令说明如下:
- subplot(131)表示设置子图为1行3列,且当前为第1个子图;
- 在保存图片之前调用tight_layout()函数可以使图片更加紧凑,边框更窄,更多关于该函数的用法可参考官方文档;
- 保存图片是可以使用参数dpi设置图片的分辨率.
在官方文档中,这种风格的API被称为"pyplot API".
- 一个简短的入门级教程:Pyplot tutorial
- 更多的介绍可以参考文档:The pyplot API
- 更多例子可以参考官方的Gallery
2. matplotlib的第二种风格——面向对象的画图接口
在面向对象编程中有一句口号:"一切皆对象",Python既然是一种面向对象的编程语言,画图也自然可以使用面向对象的方式。MATLAB风格的画图接口直观易用,但是遇到一些精细操作时,就会比较麻烦。面向对象的画图接口可以适应更复杂的场景,更精细的控制需要展示的图形。
在面向对象接口中,画图函数不再受到当前"活动"图形或坐标轴的限制,而变成了显式的Figure和Axes的方法。在画图的过程中,实际操作的是这两个类的实例:figure和axes.
figure(plt.Figure类的一个实例)可以被看成是一个能够容纳各种坐标轴、图形、文字和标签的容器。axes(plt.Axes类的一个实例)是一个带有刻度和标签的矩形,最终会包含所有可视化的图形元素。通常使用变量fig表示一个图形实例,用变量ax表示一个坐标轴实例或一组坐标轴实例。
下面是一个使用面向对象的API画图的例子:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline # example data
x = np.arange(0.1, 4, 0.5)
y = np.exp(-x) #设置error bar的(单侧)长度
error = 0.1 + 0.2 * x # 使用subplots返回fig和ax实例
fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(8, 6)) # 两个子图,返回两个Axes实例 # 第一个子图,对称的error bar
ax0.errorbar(x, y, yerr=error, fmt='-o')
ax0.set_title('variable, symmetric error') # 分别设置error bar两侧的长度
lower_error = 0.4 * error
upper_error = error
asymmetric_error = [lower_error, upper_error] # 第二个子图,不对称的error
ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o')
ax1.set_title('variable, asymmetric error')
ax1.set_yscale('log')
fig.tight_layout()
fig.savefig('demo2.png', dpi=200) # 保存图片
结果如下:
图2:error bar的可视化
如上面的例子显示的那样,可以使用函数plt.subplots()返回fig和ax实例,也可以直接使用plt.Figure和plt.Axes这两个类来返回各自的实例:
import numpy as np
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
%matplotlib inline fig = plt.figure(figsize=(8, 6))
ax = plt.axes()
x = np.linspace(0, 10, 100)
ax.plot(x, np.sin(x))
ax.set_xlabel('x', size=14)
ax.set_ylabel('sin x', size=14)
ax.set_title('sin plot', size=16)
fig.tight_layout()
fig.savefig('demo3.png', dpi=200)
结果如下:
图3:sin函数图像
当我们获取fig和ax实例后,就可以直接操作这两个实例来完成想要可视化效果。操作这两个实例的方法众多,可参考下面的官方文档:
- 关于该API的描述:The object-oriented API
- 所有元素的最高等级容器:Figure
- 坐标轴ax类:The Axes class
- 一些使用ax实例的例子:Examples using matplotlib.pyplot.axes
- 创建fig和坐标轴实例的subplots函数:subplots
3. 统计作图以及图片的风格
除了matplotlib之外,seaborn是专门为统计制图开发的可视化工具。除了直接用于数据的可视化之外,还能够完成一些常见的统计功能来辅助画图,例如误差线的估计,密度估计,箱形图分位数的计算等。此外,与matplotlib相比,seborn画图的风格更美观。因此该可视化工具在数据分析中也用的比较多。
按照文档中对API的介绍,seaborn主要将统计制图分为下面几类:
- 关系图
- 分类图
- 分布图
- 回归图
- 矩阵图:heatmap或聚类图
使用seaborn画图的例子可以参考:Example gallery
上面例子中涉及到两次对画图风格的设置,风格主要包括对图的配色,背景色、坐标轴、字体、透明度等的设置。在matplotlib中主要有以下风格可选:
> print(plt.style.available) #---output---#
['dark_background', 'seaborn-notebook', 'seaborn-darkgrid', '_classic_test', 'ggplot', 'seaborn-bright', 'classic', 'Solarize_Light2', 'fast', 'fivethirtyeight', 'seaborn-dark-palette', 'seaborn', 'tableau-colorblind10', 'seaborn-muted', 'seaborn-whitegrid', 'seaborn-ticks', 'seaborn-dark', 'seaborn-white', 'grayscale', 'seaborn-deep', 'seaborn-poster', 'seaborn-talk', 'seaborn-colorblind', 'bmh', 'seaborn-pastel', 'seaborn-paper']
参考上面的Customizing matplotlib链接,各种不同样式的比较可以参考:Matplotlib Style Gallery
4. 常见的作图类型及功能
matplotlib可以画大部分常见的图,例如柱状图、折线图、饼图、直方图等。
更多详情可以参考:Plotting-basic
Reference
https://tonysyu.github.io/raw_content/matplotlib-style-gallery/gallery.html
https://jakevdp.github.io/PythonDataScienceHandbook/
https://seaborn.pydata.org/index.html
https://matplotlib.org/index.html
https://*.com/questions/8248467/matplotlib-tight-layout-doesnt-take-into-account-figure-suptitle
【数据科学】Python数据可视化概述的更多相关文章
-
2017年排名前15的数据科学python库
2017年排名前15的数据科学python库 2017-05-22 Python程序员 Python程序员 Python程序员 微信号 pythonbuluo 功能介绍 最专业的Python社区,有每 ...
-
2018年排名前20的数据科学Python库
Python 在解决数据科学任务和挑战方面继续处于领先地位.业已证明最有帮助的Python库,我们选择 20 多个库,因为其中一些库是相互替代的,可以解决相同的问题.因此,我们将它们放在同一个分组. ...
-
9 个鲜为人知的 Python 数据科学库
除了 pandas.scikit-learn 和 matplotlib,还要学习一些用 Python 进行数据科学的新技巧. Python 是一种令人惊叹的语言.事实上,它是世界上增长最快的编程语言之 ...
-
为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字)
为什么说 Python 是数据科学的发动机(一)发展历程(附视频中字) 在PyData Seattle 2017中,Jake Vanderplas介绍了Python的发展历程以及最新动态.在这里我们把 ...
-
译:Dataiku 白皮书之《在银行和保险行业应用数据科学》
原文链接:Data Science For Banking & Insurance 如果不能正常访问,请点击备份获取. 在银行和保险行业应用数据科学 互联网巨头和金融技术创业时代的求生和发展 ...
-
Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题
Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa05 ...
-
深入对比数据科学工具箱:Python和R之争
建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...
-
数据科学20个最好的Python库
Python 在解决数据科学任务和挑战方面继续处于领先地位.去年,我们曾发表一篇博客文章 Top 15 Python Libraries for Data Science in 2017,概述了当时业 ...
-
《Python 数据科学实践指南》读书笔记
文章提纲 全书总评 C01.Python 介绍 Python 版本 Python 解释器 Python 之禅 C02.Python 基础知识 基础知识 流程控制: 函数及异常 函数: 异常 字符串 获 ...
随机推荐
-
js面向对象基础总结
js中如何定义一个类? 定义的function就是一个构造方法也就是说是定义了一个类:用这个方法可以new新对象出来. function Person(name, age){ this.name = ...
-
为什么没调用 didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegisterForRemoteNotificationsWithError
一步一步按照网上 push notification 教程走下来,发现didRegisterForRemoteNotificationsWithDeviceToken 和 didFailToRegis ...
-
POJ 1503
http://poj.org/problem?id=1503 对于这个题我也是醉了,因为最开始是有学长和我们说过这个题目的,我以为我记得题目是什么意思,也就没看题目,结果按案例去理解题意,结果WA了一 ...
-
454. 4Sum II ——查找本质:hash最快,二分次之
Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...
-
037_nginx第三方扩展
一.ngx_func_limit_req.conf(nginx限制请求数配置) # limit req zone limit_req_zone $binary_remote_addr $http_us ...
-
python 全栈开发,Day132(玩具管理页面,控制玩具通讯录,基于请求的好友关系建立)
先下载github代码,下面的操作,都是基于这个版本来的! https://github.com/987334176/Intelligent_toy/archive/v1.5.zip 注意:由于涉及到 ...
-
WINDOWS 逻辑坐标 设备坐标 屏幕坐标 客户区坐标
转自:http://blog.csdn.net/lovesunshine2008/article/details/4048158 设置坐标映射 (1)Windows坐标系统 Windows坐标系 ...
-
Java学习之路-Burlap学习
今天我们来学一下Burlap. Burlap是一种基于XML远程调用技术,但与其他基于XML的远程技术(例如SOAP或者XML-RPC)不同,Burlap的消息结构尽可能的简单,不需要额外的外部定义语 ...
-
ExcelVBA实现一键生成word文字报告及批量操作[原创]
在很多工作中,经常需要写一些类似的报告,使用同一个模板,只是里面的数据不同,人工操作工程量大且容易出错,如果能用程序直接实现可以省去不少麻烦. 本文使用ExcelVBA实现,主要思路是使用word邮件 ...
-
iOS登录单例
iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...