使用pyplot和seaborn进行画图
pyplot的一些知识
matplotlab中的对象:
matplotlib是面向对象的,在画图的时候我们了解一些对象,对我们画图是有帮助的。绘图的对象大致分为三层:
- backend_bases.FigureCanvas : 图表的绘制领域
- backend_bases.Renderer : 知道如何在FigureCanvas上绘图
- artist.Artist : 知道如何使用Renderer在FigureCanvas上绘图
这些是一层一层封装起来的,从底层到高层依次为上面的画布->颜料->画家(canvas->renderer->artist)。但是我们平时画图的时候,基本是使用最上层的封装Artist。我们在画图的时候使用的Figure,Axes,Axis都属于Artist对象。关于这三者的区分是这样的,Figure是我们运行程序后生成的图片,Axes是一个坐标系(最常用的是笛卡尔坐标系,当然还有极坐标系等),我们在这个坐标系上面绘制出我们的图形,Axis是一个坐标轴,比如笛卡尔坐标系中的X轴或者Y轴。
使用pyplot进行画图:
当我们进行画图的时候,需要有个figure还有一个axes,假如我们没有指定的话,pyplot会默认为我们指定一个。用plt.plot()进行绘图的时候,默认的是使用当前figure的当前axes进行绘图。
使用subplot的时候,它返回一个axes供我们画图,subplot传入的前三个参数是nrows,ncols,index。它表示的是我们在一个figure当中有 nrow*ncols个axes,我们使用第index个axes来进行画图。 当这些值均小于10的时候,可以直接将这三个数写为一个三位数。比如plt.subplot(1,2,1) 和 plt.subplot(121)是一样的,都表示创建一行两列个axes,并且返回第第一个axes让我们来画图。
除了可以指定多个axes以外,还可以指定多个figure, fig1 = plt.figure(1), fig2 = plt.figure(2)等。当number不存在的时候,会创建一个新的figure,当这个number是已经存在的figure.number的时候,它会切换到那个figure。
总之,pyplot是在当前figure上面的当前axes进行画图的艺术。
经典的画图的例子是这样的,来自 官网Multiple subplots
import numpy as np
import matplotlib.pyplot as plt x1 = np.linspace(0.0, 5.0)
x2 = np.linspace(0.0, 2.0)
y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2) plt.subplot(2, 1, 1)
plt.plot(x1, y1, 'o-')
plt.title('A tale of 2 subplots')
plt.ylabel('Damped oscillation') plt.subplot(2, 1, 2)
plt.plot(x2, y2, '.-')
plt.xlabel('time (s)')
plt.ylabel('Undamped') plt.show()
上面使用了两个axes,(假如使用fig = plt.figure()会更加的正规)画出的图形是这样的:
其实这里主要是让你明白画图的时候figure还有axes的概念,当我们画一个图的时候,总是画在一个特定的figure的特定axes上面。
plt还有一个subplots方法,返回一个figure还有一组axes,这在我们绘制过个图形当中非常的重要,在本文的最后将会看到例子。
Seaborn进行画图
seaborn是基于matplotlib进行的更上一层的封装,如果说matplotlib是将容易的事情变容易,难的事情成为可能,那么seaborn是将难的事情变的容易。下面我将用一些简答的例子来说明seaborn的绘图,更详细的用法可以参考官网的API。
进行数据的准备:
import seaborn as sns
from matplotlib import pyplot as plt
#导入数据
titanic = sns.load_dataset('titanic')
#做一些简单的缺失值处理
titanic = titanic.drop('deck', axis=1)
titanic['age'].fillna(titanic['age'].median(), inplace=True)
titanic['embark_town'].fillna(titanic['embark_town'].mode()[0], inplace=True)
titanic['embarked'].fillna(titanic['embarked'].mode()[0], inplace=True)
FacetGrid:观察多变量之间的关系
假如想要观察多变量之间的关系,我们可以使用FacetGrid。
FacetGrid 可以指定三个和我们想要观察变量有关的变量,看他们对于目标变量的影响情况。row, col, hue分别是行,列,颜色。FacetGrid使用的一般流程是先创建FacetGrid对象,指定data,row,col,hue等信息,然后使用map来进行画图,这期间可以调用pyplot的函数,也可以调用seaborn的函数。
grid = sns.FacetGrid(titanic, row='pclass', col='survived')
grid.map(plt.hist, 'age', bins=20)
plt.show()
从下面的图片可以看出来,我们要观察在不同的pclass和survived的情况下我们的age分布情况,这个时候,我们可以把survived指定为列,pclass指定为行, 在map函数里面,第一个为指定的函数的绘图方式,后面为该方式所使用的变量,该绘图方式既可以是plt里面的方法,也可以是seaborn里面的方法。
分类变量
seaborn提供了很多绘制分类变量的方法,下面介绍一些
pointplot: 可以进行点图的绘制
sns.pointplot( x='class',y='age', data=titanic)
plt.show()
countplot: 可以对变量进行计数
sns.countplot(x='class', hue='sex', data=titanic)
plt.show()
barplot:柱状图,可以看点估计和置信区间
sns.barplot(x='class', y='age', data=titanic)
plt.show()
boxplot 线箱图,可以发现异常值
sns.boxplot( x='class',y='fare', data=titanic)
factorplot
factorplot本身是为分类变量准备的,它可以画上面的所有类型的分类变量的图,只需要指定kind类型就可以,包含{point
, bar
, count
, box
, violin
, strip
},默认的情况是点图.
还有一些函数可以观察多个变量之间的关系
pairplot 绘制两两变量之间的关系
sns.pairplot(data=titanic)
plt.show()
heatmap 可以展示出变量的相关情况
sns.heatmap(titanic.corr())
plt.show()
这里的一些参数要说明一些:
cmap:控制数字和色彩对应的参数。使用不同的参数,彩色条是不一样的。
cbar: 布尔类型,是否设置右边的彩条。
annot:bool类型或者矩形数据集。是否在显示每个方格的注释(annotate),即里面是不是显示内容。
annot_kws:配合annot使用,为ax.text的参数。
square:bool类型,如果为True,那么设置每个方格的大小相等。
在一个figure上面绘制多个axes
上面的绘图情况都是默认使用当前figure的当前axes,并且一个figure上面有一个axes,假如你想要在一个figure上面绘制多个axes的话,可以使用subplots和seaborn函数当中的ax参数
fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(15,5))
#我们在这里生成一个fig和三个axes,在下面绘图的时候只需要用ax参数来指定特定的axes就可以了
sns.barplot(x='class', y='age', data=titanic, ax=ax1)
sns.countplot(x='sex', data=titanic, ax=ax2)
sns.distplot(titanic['age'], ax=ax3)
plt.show()
参考:
绘图: matplotlib核心剖析
Python图表绘制:matplotlib绘图库入门
使用pyplot和seaborn进行画图的更多相关文章
- Seaborn基础画图实例
使用seaborn画图时,经常不知道该该用什么函数.忘记函数的参数还有就是画出来的图单调不好看. 所以,本人对seaborn的一些常用的画图函数,并结合实例写成了代码,方便以后查询和记忆. 若代码或注 ...
- ubuntu之路——day3(本来打算做pytorch的练习 但是想到前段时间的数据预处理的可视化分析 就先总结一下)
首先依托于一个场景来进行可视化分析 直接选了天池大数据竞赛的新人赛的一个活跃题目 用的方式也是最常用的数据预处理方式 [新人赛]快来一起挖掘幸福感!https://tianchi.aliyun.com ...
- python数据可视化——matplotlib 用户手册入门:pyplot 画图
参考matplotlib官方指南: https://matplotlib.org/tutorials/introductory/pyplot.html#sphx-glr-tutorials-intro ...
- seaborn模块的基本使用
Seaborn是基于matplotlib的Python可视化库. 它提供了一个高级界面来绘制有吸引力的统计图形.Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图 ...
- linux 使用 Python 画图工具matplotlib 提示display 错误
import matplotlib.pyplot as plt Traceback (most recent call last): File "<stdin>", l ...
- Python数据可视化的10种技能
今天我来给你讲讲Python的可视化技术. 如果你想要用Python进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便你对数据有一定的了解.其中最直观的就是采用数据可视化技术,这样,数据 ...
- python基础全部知识点整理,超级全(20万字+)
目录 Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https:// ...
- 巩固复习(Hany驿站原创)_python的礼物
Python编程语言简介 https://www.cnblogs.com/hany-postq473111315/p/12256134.html Python环境搭建及中文编码 https://www ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
随机推荐
- java你应该学会什么
给初学者之一:浅谈java及应用学java 先说什么是Javajava是一种面向对象语言,真正的面向对象,任何函数和变量都以类(class)封装起来至于什么是对象什么是类,我就不废话了关于这两个概念的 ...
- Oracle常用sql语句(三)之子查询
子查询 子查询要解决的问题,不能一步求解 分为: 单行子查询 多行子查询 语法: SELECT select_list FROM table WHERE expr operator (SELECT s ...
- Kail Linux渗透测试之测试工具Armitage
Kali Linux下的Armitage是一个很强大的渗透工具,图形化操作页面,但我们把kali linux装在虚拟机里面,然后再启动armitage就会出现一个error,他会给你一个message ...
- PHP安全编程:register_globals的安全性
如果你还能记起早期Web应用开发中使用C开发CGI程序的话,一定会对繁琐的表单处理深有体会.当PHP的register_globals配置选项打开时,复杂的原始表单处理不复存在,公用变量会自动建立.它 ...
- Linux下进程信息/proc/pid/status的深入分析
https://blog.csdn.net/beckdon/article/details/48491909
- [实战]MVC5+EF6+MySql企业网盘实战(18)——文件上传,下载,修改
写在前面 经过一段时间的秀秀改改,终于把文件上传下载,修改文件夹文件名称的功能实现了. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战]MVC5+EF6+MySql企 ...
- win10家庭版和专业版远程桌面出现身份验证错误, 要求的函数不受支持。解决办法【亲测有效】
1.解决 win10家庭中文版 远程连接:出现身份验证错误 要求的函数不受支持 Windows 5.10日更新后,远程连接出现失败. 提示: 出现身份验证错误.要求的函数不受支持 这可能是由于 Cre ...
- 【LOJ】 #2013. 「SCOI2016」幸运数字
题解 最大异或和,明显是个线性基 然而还有那么多路径--那就树分治,反正点数看起来很少,就是为了让人乘上一个60的常数嘛 把一个树的点分树记录下来,然后看看询问的两个点彼此相同的最后一个父亲是谁,把这 ...
- vs 单元测试
vs 2010 NOget 包 安装NUnitTDNet,下载TestDriven.NET(http://www.testdriven.net/). 准备动作 先到http://www.testdri ...
- php抓取一个页面的图片
思路: 1.找到一个页面 2.正则过滤所有的img 3.正则过滤出所有的src的属性 4.获取链接信息,写入文件 file_get_contents(), file_put_contents() 5. ...