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复制文件的方法实例详解
May 22 Python
Python中Class类用法实例分析
Nov 12 Python
实例解析Python的Twisted框架中Deferred对象的用法
May 25 Python
python函数的5种参数详解
Feb 24 Python
python利用不到一百行代码实现一个小siri
Mar 02 Python
解决Tensorflow安装成功,但在导入时报错的问题
Jun 13 Python
详解python3中tkinter知识点
Jun 21 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
django 类视图的使用方法详解
Jul 24 Python
python 制作简单的音乐播放器
Nov 25 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
IIS6的PHP最佳配置方法
2007/03/19 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
js AspxButton的客户端操作
2009/06/26 Javascript
jQuery在IE下使用未闭合的xml代码创建元素时的Bug介绍
2012/01/10 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
按Enter键触发事件的jquery方法实现代码
2014/02/17 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
JS递归遍历对象获得Value值方法技巧
2016/06/14 Javascript
用AngularJS的指令实现tabs切换效果
2016/08/31 Javascript
AngularJS压缩JS技巧分析
2016/11/08 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
jQuery实现文字自动横移
2017/01/08 Javascript
深入理解Node内建模块和对象
2019/03/12 Javascript
小程序click-scroll组件设计
2019/06/18 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
Python调用C/C++动态链接库的方法详解
2014/07/22 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
windows10下python3.5 pip3安装图文教程
2018/04/02 Python
Python使用OpenCV进行标定
2018/05/08 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
华为智利官方商店:Huawei Chile
2020/05/09 全球购物
计算机网络毕业生自荐信
2013/10/01 职场文书
自我介绍演讲稿
2014/01/15 职场文书
会计电算化专业自荐信
2014/03/15 职场文书
党员创先争优承诺书
2014/03/26 职场文书
社会实践评语
2014/04/28 职场文书
办公楼租房协议书范本
2014/11/25 职场文书
教师节老师寄语
2015/05/28 职场文书
欢送领导祝酒词
2015/08/12 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书