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实现排序算法
Feb 14 Python
Python实现的数据结构与算法之链表详解
Apr 22 Python
Python中random模块用法实例分析
May 19 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
Fabric 应用案例
Aug 28 Python
python通过cookie模拟已登录状态的初步研究
Nov 09 Python
谈谈如何手动释放Python的内存
Dec 17 Python
python微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
python或C++读取指定文件夹下的所有图片
Aug 31 Python
wxPython实现文本框基础组件
Nov 18 Python
Python中22个万用公式的小结
Jul 21 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
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
PHP终止脚本运行三种实现方法详解
2020/09/01 PHP
HTML IMG标签 onload 内存溢出导致浏览器CPU占用过高
2021/03/09 Javascript
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
Three.js基础部分学习
2017/01/08 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
如何在vue 中使用柱状图 并自修改配置
2021/01/21 Vue.js
python对html代码进行escape编码的方法
2015/05/04 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2019/12/12 Python
关于Python解包知识点总结
2020/05/05 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
python实现三种随机请求头方式
2021/01/05 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
银行柜员应聘推荐信范文
2013/11/24 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
机电一体化求职信
2014/03/10 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
师德先进个人事迹材料
2014/12/19 职场文书
长江三峡导游词
2015/01/31 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python中super().__init__()测试以及理解
2021/12/06 Python