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 相关文章推荐
使用Python编写Linux系统守护进程实例
Feb 03 Python
python创建一个最简单http webserver服务器的方法
May 08 Python
python3 破解 geetest(极验)的滑块验证码功能
Feb 24 Python
在Python中,不用while和for循环遍历列表的实例
Feb 20 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
安装2019Pycharm最新版本的教程详解
Oct 22 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
keras实现基于孪生网络的图片相似度计算方式
Jun 11 Python
几款Python编译器比较与推荐(小结)
Oct 15 Python
全网最全python库selenium自动化使用详细教程
Jan 12 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
Mar 03 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树的代码,可以嵌套任意层
2006/10/09 PHP
带密匙的php加密解密示例分享
2014/01/29 PHP
PHP实现的贪婪算法实例
2017/10/17 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
js+FSO遍历文件夹下文件并显示
2007/03/07 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
node.js中的fs.stat方法使用说明
2014/12/16 Javascript
html的DOM中document对象forms集合用法实例
2015/01/21 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
2015/04/07 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
js监听input输入框值的实时变化实例
2017/01/26 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
使用Vue写一个datepicker的示例
2018/01/27 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
python实现的解析crontab配置文件代码
2014/06/30 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
关于Python作用域自学总结
2019/06/10 Python
python3 常见解密加密算法实例分析【base64、MD5等】
2019/12/19 Python
matplotlib绘制正余弦曲线图的实现
2021/02/22 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
生物科学系大学生的自我评价
2013/12/20 职场文书
中班中秋节活动反思
2014/02/18 职场文书
小学生操行评语
2014/04/22 职场文书
村委会贫困证明范本
2014/09/17 职场文书
乡领导班子四风问题对照检查材料
2014/09/25 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
学校元旦晚会开场白
2014/12/14 职场文书
2015年纪念“卢沟桥事变”78周年活动方案
2015/05/06 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python
vue3不同环境下实现配置代理
2022/05/25 Vue.js