有时我们不仅需要查看单个变量的分布,同时也需要查看变量之间的联系,这时就需要用到联合分布图。

这里利用Jake Vanderplas所著的《Python数据科学手册》一书中的数据,学习画图。

数据地址:http://raw.githubusercontent.com/jakevdp/marathon-data/master/marathon-data.csv

先来看一下这个数据文件(此处只摘取部分):

       age gender     split     final
0 33 M 01:05:38 02:08:51
1 32 M 01:06:26 02:09:28
2 31 M 01:06:49 02:10:42
3 38 M 01:06:16 02:13:45
4 31 M 01:06:32 02:13:59
5 31 M 01:06:13 02:14:11
6 27 M 01:06:40 02:14:28
7 31 M 01:06:31 02:15:16
8 30 M 01:05:39 02:15:57
9 30 M 01:05:40 02:16:39
10 26 M 01:08:10 02:18:18
... ... ... ...
37220 52 M 03:20:00 08:46:04
37221 53 M 03:40:34 08:46:39
37222 60 M 03:39:16 08:46:48
37223 57 M 03:47:08 08:46:58
37224 61 M 03:32:20 08:47:25
37225 41 M 03:43:25 08:49:12
37226 24 M 03:34:01 08:49:36
37227 79 M 03:28:31 08:49:46
37228 24 W 03:35:21 08:50:47
37229 60 W 03:49:33 08:50:58
37230 50 W 03:43:48 08:52:14

这个数据展示的是各年龄和性别的人跑马拉松比赛所用的时间(半程split和全程final)。

让我们来画一个联合分布图,看一下半程和全程时间的分布情况。

联合分布图: sns.jointplot(x,y,data=...,kind=...)

这里需要对数据做的处理工作是把半程和全程的时间转换成秒,因为时间的格式是固定的,因此写了一个用于时间转换的helper function。

代码如下:

import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
marathon=pd.read_csv(r"http://raw.githubusercontent.com/jakevdp/marathon-data/master/marathon-data.csv") marathon["split"]=marathon["split"].astype(str)
marathon["final"]=marathon["final"].astype(str) def convert_time_to_sec(time):
"""convert hh:mm:ss to seconds"""
hour=int(time[:2])
minute=int(time[3:5])
sec=int(time[6:])
total_sec=hour*3600+minute*60+sec
return total_sec marathon["split_sec"]=[convert_time_to_sec(i) for i in marathon["split"]]
marathon["final_sec"]=[convert_time_to_sec(i) for i in marathon["final"]] sns.jointplot("split_sec","final_sec",data=marathon) plt.show()

图像如下:

可以看出,如果数据点位于对角线上,说明半程所用的时间正好是全程的一半。但是,大部分数据点都位于对角线上方,这说明大部分人后半程用的时间要比前半程多,也就是越跑越慢。

此外,如果将kind参数设置为reg,图像还会显示拟合线。

Matplotlib学习---用seaborn画联合分布图(joint plot)的更多相关文章

  1. Matplotlib学习---用seaborn画直方图,核密度图(histogram, kdeplot)

    由于直方图受组距(bin size)影响很大,设置不同的组距可能会产生完全不同的可视化结果.因此我们可以用密度平滑估计来更好地反映数据的真实特征.具体可参见这篇文章:https://blog.csdn ...

  2. Matplotlib学习---用seaborn画矩阵图(pair plot)

    矩阵图非常有用,人们经常用它来查看多个变量之间的联系. 下面用著名的鸢尾花数据来画一个矩阵图.从sklearn导入鸢尾花数据,然后将其转换成pandas的DataFrame类型,最后用seaborn画 ...

  3. Matplotlib学习---用wordcloud画词云(Word Cloud)

    画词云首先需要安装wordcloud(生成词云)和jieba(中文分词). 先来说说wordcloud的安装吧,真是一波三折.首先用pip install wordcloud出现错误,说需要安装Vis ...

  4. Matplotlib学习---用mplot3d画莫比乌斯环(Mobius strip)

    mplot3d是matplotlib里用于绘制3D图形的一个模块.关于mplot3d 绘图模块的介绍请见:https://blog.csdn.net/dahunihao/article/details ...

  5. Matplotlib学习---用matplotlib画直方图/密度图(histogram, density plot)

    直方图用于展示数据的分布情况,x轴是一个连续变量,y轴是该变量的频次. 下面利用Nathan Yau所著的<鲜活的数据:数据可视化指南>一书中的数据,学习画图. 数据地址:http://d ...

  6. Matplotlib学习---用matplotlib和sklearn画拟合线(line of best fit)

    在机器学习中,经常要用scikit-learn里面的线性回归模型来对数据进行拟合,进而找到数据的规律,从而达到预测的目的.用图像展示数据及其拟合线可以非常直观地看出拟合线与数据的匹配程度,同时也可用于 ...

  7. Matplotlib学习---用matplotlib画箱线图(boxplot)

    箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分 ...

  8. Matplotlib学习---matplotlib的一些基本用法

    Matplotlib有两种接口,一种是matlab风格接口,一种是面向对象接口.在这里,统一使用面向对象接口.因为面向对象接口可以适应更复杂的场景,在多图之间进行切换将变得非常容易. 首先导入matp ...

  9. 很值得学习的java 画图板源码

    很值得学习的java 画图板源码下载地址:http://download.csdn.net/source/2371150 package minidrawpad; import java.awt.*; ...

随机推荐

  1. Jmeter(三十七)循环控制器+交替控制器+事务控制器 完美实现接口字段参数化校验

    我们在做接口自动化的时候,常常因为无法灵活的的校验接口字段而烦恼.不能自动校验接口字段的脚本,也就不能称之为接口自动化.因此,我设计了一套组合式的控制器,可以完美的解决这个问题 1:首先我们需要在本地 ...

  2. 剑指offer--1.二维数组中的查找

    题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...

  3. 实现多个标签页之间通信的几种方法(sharedworker)

      效果图.gif prologue 之前在网上看到一个面试题:如何实现浏览器中多个标签页之间的通信.我目前想到的方法有三种:使用websocket协议.通过localstorage.以及使用html ...

  4. Python-递归复习-斐波那契-阶乘-52

    # 超过最大递归限制的报错# 只要写递归函数,必须要有结束条件. # 返回值# 不要只看到return就认为已经返回了.要看返回操作是在递归到第几层的时候发生的,然后返回给了谁.# 如果不是返回给最外 ...

  5. Continued Fractions CodeForces - 305B (java+高精 / 数学)

    A continued fraction of height n is a fraction of form . You are given two rational numbers, one is ...

  6. <iOS开发>之App上架流程(2017)

    本文主要介绍了App上架流程,以及上架过程中会遇到的一些问题. 一.App上架前的准备. 上架前,需要开发人员有苹果开发者账号,具体请阅读苹果开发者账号注册申请流程.本文是在已经拥有开发者账号的前提下 ...

  7. remote:error:refusing to update checked out branc

    参考网上的GIt服务器配置流程(http://blog.csdn.net/ice520301/article/details/6142503) 遇到了 http://www.cnblogs.com/c ...

  8. Mixing x86 with x64 code (混合编写x86和x64代码)

    几个月前我小小的研究了在WOW64下的32位进程中运行native x64代码. 第二个设想是在64位进程下运行x86代码.它们都是可以的,如我google的一样, 已经有人在使用这两种方法了: ht ...

  9. [转帖]CS、IP和PC寄存器

    https://www.cnblogs.com/zhuge2018/p/8466288.html 之前的理解不对 当然了 现在的理解也不太对.. CS.IP和PC寄存器 CS寄存器和IP寄存器: 首先 ...

  10. [转帖]CentOS 6 服务器安全配置指南(通用)

    CentOS 6 服务器安全配置指南(通用) http://seanlook.com/2014/09/07/linux-security-general-settings/  发表于 2014-09- ...