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 相关文章推荐
RC4文件加密的python实现方法
Jun 30 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
Python 中 list 的各项操作技巧
Apr 13 Python
Python中异常重试的解决方案详解
May 05 Python
python 中的list和array的不同之处及转换问题
Mar 13 Python
python去除扩展名的实例讲解
Apr 23 Python
对Python多线程读写文件加锁的实例详解
Jan 14 Python
python3去掉string中的标点符号方法
Jan 22 Python
Python安装Bs4的多种方法
Nov 28 Python
Python的这些库,你知道多少?
Jun 09 Python
anaconda python3.8安装后降级
Jun 11 Python
Python中requests库的用法详解
Jun 05 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
Zend Framework 2.0事件管理器(The EventManager)入门教程
2014/08/11 PHP
php实现在限定区域里自动调整字体大小的类实例
2015/04/02 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
2014/03/25 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
逐一介绍Jquery data()、Jquery stop()、jquery delay()函数(详)
2015/11/04 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
值得分享和收藏的Bootstrap学习教程
2016/05/12 Javascript
javascript-解决mongoose数据查询的异步操作
2016/12/22 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
NodeJs通过async/await处理异步的方法
2017/10/09 NodeJs
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
关于RxJS Subject的学习笔记
2018/12/05 Javascript
解决elementui表格操作列自适应列宽
2020/12/28 Javascript
Python callable()函数用法实例分析
2018/03/17 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
Django 视图层(view)的使用
2018/11/09 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
HTML5的表单(绝对特别强大的功能)使用示例
2013/06/20 HTML / CSS
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
会计学应届毕业生推荐信
2013/11/04 职场文书
网上卖盒饭创业计划书范文
2014/02/07 职场文书
毕业自我鉴定怎么写
2014/03/25 职场文书
三八妇女节标语
2014/10/09 职场文书
2014年党员个人工作总结
2014/12/02 职场文书
幼儿园小班开学寄语
2015/05/27 职场文书
交通安全温馨提示语
2015/07/14 职场文书
找规律教学反思
2016/02/23 职场文书
Nginx快速入门教程
2021/03/31 Servers
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers