Python数据可视化matplotlib和seaborn
- 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画图的基本设置:
1 import matplotlib as mpl
2 import matplotlib.pyplot as plt
3 mpl.rcParams['axes.linewidth'] = 1.5 #set the value globally, 设置坐标轴线宽
4 import seaborn as sns
5 sns.set() # 使用seaborn设置绘图风格
更多自定义设置可以参考官方文档:Customizing matplotlib
下面使用MATLAB风格画图,对一组分类变量(categorical variables)进行可视化

# matplotlib在windows上中文乱码,用这两句:
# plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
# plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号 # matplotlib在mac上中文乱码,用这两句:from matplotlib.font_manager import FontProperties; fontproperties=FontProperties(fname='/Library/Fonts/Songti.ttc')
1 names = ['group_a', 'group_b', 'group_c'] # 不同分类的名称
2 values = [1, 10, 100] # 不同分类对应的值
3
4 plt.figure(1, figsize=(9, 3)) # 设置图片大小
5
6 plt.subplot(131) # 1x3, 第一个子图
7 plt.bar(names, values) # 柱状图
8 plt.subplot(132) # 1x3, 第二个子图
9 plt.scatter(names, values) # 散点图
10 plt.subplot(133) # 1x3, 第三个子图
11 plt.plot(names, values) # 折线图
12 plt.suptitle('Categorical Plotting') # 图片的标题
13 # w_pad设置子图之间的间隔宽度;rect设置整个图像部分(矩形)的左上点坐标和右下点坐标,默认值为[0, 0, 1, 1]
14 plt.tight_layout(w_pad=0.1, rect=[0, 0.03, 1, 0.95])
15 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画图的例子:

1 import numpy as np
2 import matplotlib.pyplot as plt
3 %matplotlib inline
4
5 # example data
6 x = np.arange(0.1, 4, 0.5)
7 y = np.exp(-x)
8
9 #设置error bar的(单侧)长度
10 error = 0.1 + 0.2 * x
11
12 # 使用subplots返回fig和ax实例
13 fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True, figsize=(8, 6)) # 两个子图,返回两个Axes实例
14
15 # 第一个子图,对称的error bar
16 ax0.errorbar(x, y, yerr=error, fmt='-o')
17 ax0.set_title('variable, symmetric error')
18
19 # 分别设置error bar两侧的长度
20 lower_error = 0.4 * error
21 upper_error = error
22 asymmetric_error = [lower_error, upper_error]
23
24 # 第二个子图,不对称的error
25 ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o')
26 ax1.set_title('variable, asymmetric error')
27 ax1.set_yscale('log')
28 fig.tight_layout()
29 fig.savefig('demo2.png', dpi=200) # 保存图片

结果如下:
图2:error bar的可视化
如上面的例子显示的那样,可以使用函数plt.subplots()返回fig和ax实例,也可以直接使用plt.Figure和plt.Axes这两个类来返回各自的实例:

1 import numpy as np
2 import matplotlib.pyplot as plt
3 plt.style.use('seaborn-whitegrid')
4 %matplotlib inline
5
6 fig = plt.figure(figsize=(8, 6))
7 ax = plt.axes()
8 x = np.linspace(0, 10, 100)
9 ax.plot(x, np.sin(x))
10 ax.set_xlabel('x', size=14)
11 ax.set_ylabel('sin x', size=14)
12 ax.set_title('sin plot', size=16)
13 fig.tight_layout()
14 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://stackoverflow.com/questions/8248467/matplotlib-tight-layout-doesnt-take-into-account-figure-suptitle
Python数据可视化matplotlib和seaborn的更多相关文章
- python数据可视化-matplotlib入门(7)-从网络加载数据及数据可视化的小总结
除了从文件加载数据,另一个数据源是互联网,互联网每天产生各种不同的数据,可以用各种各样的方式从互联网加载数据. 一.了解 Web API Web 应用编程接口(API)自动请求网站的特定信息,再对这些 ...
- 数据可视化matplotlib、seaborn、pydotplus
如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/10486560.html 一.数据可视化 data.mat 链接:https://p ...
- Python数据可视化--matplotlib
抽象化|具体化: 如盒形图 | 现实中的图 功能性|装饰性:没有装饰和渲染 | 包含艺术性美学上的装饰 深度表达|浅度表达:深入层次的研究探索数据 | 易于理解的,直观的表示 多维度|单一维度:数据的 ...
- python数据可视化-matplotlib入门(6)-从文件中加载数据
前几篇都是手动录入或随机函数产生的数据.实际有许多类型的文件,以及许多方法,用它们从文件中提取数据来图形化. 比如之前python基础(12)介绍打开文件的方式,可直接读取文件中的数据,扩大了我们的数 ...
- python数据可视化-matplotlib入门(5)-饼图和堆叠图
饼图常用于统计学模块,画饼图用到的方法为:pie( ) 一.pie()函数用来绘制饼图 pie(x, explode=None, labels=None, colors=None, autopct=N ...
- Python数据可视化Matplotlib——Figure画布背景设置
之前在今日头条中更新了几期的Matplotlib教学短视频,在圈内受到了广泛好评,现应大家要求,将视频中的代码贴出来,方便大家学习. 为了使实例图像显得不单调,我们先将绘图代码贴上来,此处代码对Fig ...
- python数据可视化——matplotlib 用户手册入门:pyplot 画图
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-intro ...
- python数据可视化——matplotlib 用户手册入门:使用指南
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introd ...
- Python数据可视化-seaborn库之countplot
在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效. seaborn官方文档见链接:http://seaborn.pydata.org/api.html countplot是s ...
随机推荐
- WPF style 换肤
原文地址:http://www.cnblogs.com/DebugLZQ/p/3181040.html 原作者:DebugLZQ UI的风格一致性是应用程序应当关注的重要特性. 1.Creating ...
- kaptcha验证码的使用(转)
使用kaptcha可以方便的配置: 验证码的字体 验证码字体的大小 验证码字体的字体颜色 验证码内容的范围(数字,字母,中文汉字!) 验证码图片的大小,边框,边框粗细,边框颜色 验证码的干扰线(可以自 ...
- JQuery-- 链式编程、静态函数,自己制作jQuery插件
一.链式编程 为什么jQuery运行链式编程 ,让我们的代码(方法)连续不间断书写(连续调用)其实主要还是jQuery很多的函数执行完毕之后,都会返回一个jQuery对象 因为获取操作的时候,会返回获 ...
- 移动项目到centos中运行报错:failed to open stream: Permission denied
这是文件夹没有读写权限的错误: (注意:TP5.0权限给runtime文件夹就行了,官方文档在安装tp5的方法中有介绍到权限问题) 在需要赋予权限的文件夹的前一级输入: chmod -R 文件夹名字
- 苹果建议开发者在iOS 7正式发布之前把应用提交至App Store
今早在给开发者的邮件中,苹果建议开发者在下周9月18日正式发布iOS 7之前把应用提交至App Store.邮件特别提到了iOS 7的新功能,还提到了充分利用iPhone 5S功能的新API,比如M7 ...
- Java中try catch finally语句中含return语句的执行情况总结-编程陷阱
前言:有java编程基础的人对java的异常处理机制都会有一定了解,而且可能感觉使用起来也比较简单,但如果在try catch finally语句块中遇到return语句,开发者可能就会遇到一些逻辑问 ...
- phpexcel使用说明3
下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...
- QT开发ROS遇到问题:execute_process(/usr/bin/python"/home/fu/catkin_ws/build/catkin_genetated/generate_cached_setup.py)..........
具体如上图显示,网上给的方法是重装ros和重新创建ROS工作空间.经过这样做以后发现问题依然存在. 最后考虑可能是没有加载ROS的环境变量.(我的qtcreator中已经有了创建ros工程的项目,但是 ...
- 设置select和option的文字居中
select{ width: auto; padding: 0 1%; //左右一定要设置 margin: 0; } option{ text-align:center; }
- part11-LED驱动程序设计-part11.1-字符设备控制