使用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()

在一个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核心概念

绘图: matplotlib核心剖析

Python图表绘制:matplotlib绘图库入门

原文地址:https://www.cnblogs.com/jiaxin359/p/8604689.html

时间: 2024-08-30 10:31:29

使用pyplot和seaborn进行可视化的相关文章

Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题

Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题 问题描述: 我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa059d1 在做Python Data Science Handbook的实例学习,4.16.3 案例:探索马拉松比赛成绩里,有提示将时分秒的时间化为秒的总数,以方便画图.书里给出的指令是: data['split_sec']=data['split'].astype(int)/1E9 data['fi

seaborn 数据可视化(二)带有类别属性的数据可视化

Seaborn的分类图分为三类,将分类变量每个级别的每个观察结果显示出来,显示每个观察分布的抽象表示,以及应用统计估计显示的权重趋势和置信区间: 第一个包括函数swarmplot()和stripplot() 第二个包括函数boxplot()和violinplot() 第三个包括函数barplot()和pointplt() 导入所需要的库: import numpy as np import matplotlib.pyplot as plt import seaborn as sns sns.se

pyplot 绘图与可视化

1. 基本使用 #!/usr/bin/env python # coding=utf-8 import matplotlib.pyplot as plt from numpy.random import randn # example 1 fig = plt.figure() ax1 = fig.add_subplot(221) ax2 = fig.add_subplot(222) ax1.plot(randn(100).cumsum(),'r--') ax2.hist(randn(100),b

机器学习经典算法之EM

一.简介 EM 的英文是 Expectation Maximization,所以 EM 算法也叫最大期望算法. 我们先看一个简单的场景:假设你炒了一份菜,想要把它平均分到两个碟子里,该怎么分? 很少有人用称对菜进行称重,再计算一半的分量进行平分.大部分人的方法是先分一部分到碟子 A 中,然后再把剩余的分到碟子 B 中,再来观察碟子 A 和 B 里的菜是否一样多,哪个多就匀一些到少的那个碟子里,然后再观察碟子 A 和 B 里的是否一样多……整个过程一直重复下去,直到份量不发生变化为止. 你能从这个

【转】爬取豆瓣电影top250提取电影分类进行数据分析

一.爬取网页,获取需要内容 我们今天要爬取的是豆瓣电影top250页面如下所示: 我们需要的是里面的电影分类,通过查看源代码观察可以分析出我们需要的东西.直接进入主题吧! 知道我们需要的内容在哪里了,接下来就使用我们python强大的request库先获取网页内容下来吧!获取内容后,再使用一个好用的lxml库来分析网页内容,然后获取我们的内容就可以做下一步操作了.先贴出使用request库和lxml分析的代码 1 def get_page(i): 2 url = 'https://movie.d

Mooc数据分析-02数据展示

主要内容是Matplotlib库的基本使用和方法 1 Matplotlib库 1.1 Matplotlib的介绍 Python优秀的数据可视化第三方库 数据可视化就是将数据以特定的图形图像的方式展示出来, 使数据更加的直观明了 范例网站 Matplotlib库是由各种可视化类构成, 内部结构复杂 为了简洁使用, 可以使用matplotlib.pyplot这个绘制各类可视化图形的命令子库, 类似于快捷方式的库来简化操作 导入 import matplotlib.pyplot as plt 同样pl

机器学习 Matplotlib库入门

2017-07-21 15:22:05 Matplotlib库是一个优秀的python的数据可视化的第三方类库,其中的pyplot支持了类似matlab的图像输出操作.matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式. import matplotlib.pyplot as plt #plt是一个别名 一.matplotlib.pyplot子库 plt.plot(x, y, format_string, **kwargs) x  : X轴数据,列表或数组,可选 y

数据分析与展示——Matplotlib库入门

Matplotlib库入门 Matplotlib库介绍 Matliotlib库是Python优秀的数据可视化第三方库. Matliotlib库的效果见:http://matplotlib.org/gallery.html Matplotlib库由各种可视化类构成,内部结构复杂,受Matlab启发. matplotlib.pyplot是绘制各类可视化图形的命令字库,相当于快捷方式.导入方式如下: import matplotlib.pyplot as plt 范例:使用Matplotlib库绘图

【Python数据分析基础】: 异常值检测和处理

在机器学习中,异常检测和处理是一个比较小的分支,或者说,是机器学习的一个副产物,因为在一般的预测问题中,模型通常是对整体样本数据结构的一种表达方式,这种表达方式通常抓住的是整体样本一般性的性质,而那些在这些性质上表现完全与整体样本不一致的点,我们就称其为异常点,通常异常点在预测问题中是不受开发者欢迎的,因为预测问题通产关注的是整体样本的性质,而异常点的生成机制与整体样本完全不一致,如果算法对异常点敏感,那么生成的模型并不能对整体样本有一个较好的表达,从而预测也会不准确.从另一方面来说,异常点在某