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 相关文章推荐
urllib2自定义opener详解
Feb 07 Python
Python中apply函数的用法实例教程
Jul 31 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
Python设计模式之抽象工厂模式原理与用法详解
Jan 15 Python
详解python中init方法和随机数方法
Mar 13 Python
PyTorch的Optimizer训练工具的实现
Aug 18 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
Aug 22 Python
python 消除 futureWarning问题的解决
Dec 25 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
python requests库的使用
Jan 06 Python
Python 数据可视化之Bokeh详解
Nov 02 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 mysql数据库操作分页类
2008/06/04 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
详解PHP使用Redis存储session时的一个Warning定位
2017/07/05 PHP
PHP Redis扩展无法加载的问题解决方法
2019/08/22 PHP
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
javascript作用域链(Scope Chain)用法实例解析
2015/11/30 Javascript
全面解析Bootstrap布局组件应用
2016/02/22 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
AngularJS动态生成div的ID源码解析
2016/08/29 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
微信小程序多张图片上传功能
2017/06/07 Javascript
解决VUEX兼容IE上的报错问题
2018/03/01 Javascript
JavaScript引用类型RegExp基本用法详解
2018/08/09 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
typescript编写微信小程序创建项目的方法
2021/01/29 Javascript
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python操作xml文件详细介绍
2014/06/09 Python
Python运算符重载用法实例分析
2015/06/01 Python
浅谈python中的实例方法、类方法和静态方法
2017/02/17 Python
Python算术运算符实例详解
2017/05/31 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python-视频分帧&多帧合成视频实例
2019/12/10 Python
详解用Python进行时间序列预测的7种方法
2020/03/13 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Rosetta Stone官方网站:语言学习
2019/01/05 全球购物
党校学习思想汇报
2014/01/06 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
2015年禁毒工作总结
2015/04/30 职场文书
会议新闻稿
2015/07/17 职场文书
2015年学校政教工作总结
2015/07/20 职场文书
教师节随笔
2015/08/15 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书