Python实现平行坐标图的绘制(plotly)方式


Posted in Python onNovember 22, 2019

平行坐标图简介

当数据的维度超过三维时,此时数据的可视化就变得不再那么简单。为解决高维数据的可视化问题,我们可以使用平行坐标图。以下关于平行坐标图的解释引自百度百科:为了克服传统的笛卡尔直角坐标系容易耗尽空间、 难以表达三维以上数据的问题, 平行坐标图将高维数据的各个变量用一系列相互平行的坐标轴表示, 变量值对应轴上位置。为了反映变化趋势和各个变量间相互关系,往往将描述不同变量的各点连接成折线。所以平行坐标图的实质是将m维欧式空间的一个点Xi(xi1,xi2,...,xim) 映射到二维平面上的一条曲线。在N条平行的线的背景下,(一般这N条线都竖直且等距),一个在高维空间的点可以被表示为一条拐点在N条平行坐标轴的折线,在第K个坐标轴上的位置就表示这个点在第K个维的值。

绘制平行坐标图

本文主要介绍两种利用Python绘制平行坐标图的方法,分别是利用pandas包绘制和利用plotly包绘制(默认已安装pandas包和plotly包)。

利用pandas实现平行坐标图的绘制

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
from pandas.plotting import parallel_coordinates
 
data = sns.load_dataset('iris')
 
fig,axes = plt.subplots()
parallel_coordinates(data,'species',ax=axes)
fig.savefig('parallel.png')

绘制的平行坐标图如下所示:

Python实现平行坐标图的绘制(plotly)方式

从上图可以看到x轴上变量共用一个y坐标轴,此时因sepal_length、sepal_width、petal_length以及petal_width这四个变量的值得范围相近,利用这种方式作出的共用y轴的平行坐标图有着很好的可视化效果;但假如sepal_length、sepal_width、petal_length以及petal_width这些变量的值的范围相差较大时,这种共用y轴的平行坐标图就不再适用,此时我们需要的是y轴独立的平行坐标图。下面介绍的另一种方法实现的就是y轴独立的平行坐标图。

利用plotly实现平行坐标图的绘制

plotly绘图有两种模式,一种是online模式,另一种是offline模式。本文使用的是offline模式,且是在jupyter notebook中进行绘图。

首先熟悉一下plotly的绘图方式:

import plotly as py
import plotly.graph_objs as go
py.offline.init_notebook_mode(connected=True) # 初始化设置
 
py.offline.iplot({
 "data": [go.Parcoords(
  line = dict(color = 'blue'),
  dimensions = list([
   dict(range = [1,5],
     constraintrange = [1,2],
     label = 'A', values = [1,4]),
   dict(range = [1.5,5],
     tickvals = [1.5,3,4.5],
     label = 'B', values = [3,1.5]),
   dict(range = [1,5],
     tickvals = [1,2,4,5],
     label = 'C', values = [2,4],
     ticktext = ['text 1', 'text 2', 'text 3', 'text 4']),
   dict(range = [1,5],
     label = 'D', values = [4,2])
  ])
 )],
 "layout": go.Layout(title="My first parallel coordinates")
})

绘制图形如下所示:

Python实现平行坐标图的绘制(plotly)方式

绘制鸢尾花数据的平行坐标图:

df = sns.load_dataset('iris')
df['species_id'] = df['species'].map({'setosa':1,'versicolor':2,'virginica':3}) #用于颜色映射
 
py.offline.iplot({
 "data": [go.Parcoords(
  line = dict(color = df['species_id'],
     colorscale = [[0,'#D7C16B'],[0.5,'#23D8C3'],[1,'#F3F10F']]),
  dimensions = list([
   dict(range = [2,8],
    constraintrange = [4,8],
    label = 'Sepal Length', values = df['sepal_length']),
   dict(range = [1,6],
    label = 'Sepal Width', values = df['sepal_width']),
   dict(range = [0,8],
    label = 'Petal Length', values = df['petal_length']),
   dict(range = [0,4],
    label = 'Petal Width', values = df['petal_width'])
  ])
 )],
 "layout": go.Layout(title='Iris parallel coordinates plot')
})

绘制的图形如下所示:

Python实现平行坐标图的绘制(plotly)方式

注:关于plotly.offline.iplot、go.Parcoords以及go.Layout的用法可以利用help关键字查看相关帮助文档,与pyecharts不同,plotly提供的帮助文档非常详细。

以上这篇Python实现平行坐标图的绘制(plotly)方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
ssh批量登录并执行命令的python实现代码
May 25 Python
Mac下Supervisor进程监控管理工具的安装与配置
Dec 16 Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 Python
Python中的一些陷阱与技巧小结
Jul 10 Python
Python中的os.path路径模块中的操作方法总结
Jul 07 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
python中模块的__all__属性详解
Oct 26 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
May 12 Python
python如何设置静态变量
Sep 07 Python
python模块内置属性概念及实例
Feb 18 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
Python Celery多队列配置代码实例
Nov 22 #Python
python 协程 gevent原理与用法分析
Nov 22 #Python
python 并发下载器实现方法示例
Nov 22 #Python
使用python绘制二维图形示例
Nov 22 #Python
python将邻接矩阵输出成图的实现
Nov 21 #Python
python实现小世界网络生成
Nov 21 #Python
使用Python的networkx绘制精美网络图教程
Nov 21 #Python
You might like
php session劫持和防范的方法
2013/11/12 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
PHP的命令行命令使用指南
2015/08/18 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
Yii2 如何在modules中添加验证码的方法
2017/06/19 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
基于jQuery的图片剪切插件
2011/08/03 Javascript
Jquery 获取checkbox的checked问题
2011/11/16 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
JS在TextArea光标位置插入文字并实现移动光标到文字末尾
2013/06/21 Javascript
原生js实现键盘控制div移动且解决停顿问题
2016/12/05 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue 插件的方法代码详解
2019/06/06 Javascript
解决vuex数据异步造成初始化的时候没值报错问题
2019/11/13 Javascript
JavaScript常用工具函数大全
2020/05/06 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
2014/08/22 Python
教你用Python脚本快速为iOS10生成图标和截屏
2016/09/22 Python
python使用邻接矩阵构造图代码示例
2017/11/10 Python
PyQt5每天必学之单行文本框
2018/04/19 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
python 字符串只保留汉字的方法
2018/11/16 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
关于Keras Dense层整理
2020/05/21 Python
python urllib和urllib3知识点总结
2021/02/08 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
《颐和园》教学反思
2014/02/26 职场文书
关爱留守儿童倡议书
2014/04/15 职场文书
小学评语大全
2014/04/22 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
JS实现九宫格拼图游戏
2022/06/28 Javascript