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黑魔法之编码转换
Jan 25 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
Python 基于Twisted框架的文件夹网络传输源码
Aug 28 Python
​如何愉快地迁移到 Python 3
Apr 28 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
给我一面国旗 python帮你实现
Sep 30 Python
python实现while循环打印星星的四种形状
Nov 23 Python
在Python 的线程中运行协程的方法
Feb 24 Python
keras输出预测值和真实值方式
Jun 27 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 11 Python
python 如何获取页面所有a标签下href的值
May 06 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间隔一段时间执行代码的方法
2014/12/02 PHP
两个php日期控制类实例
2014/12/09 PHP
CI框架中通过hook的方式实现简单的权限控制
2015/01/07 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
JQuery 入门实例1
2009/06/25 Javascript
自己的js工具 Event封装
2009/08/21 Javascript
JQuery 表单中textarea字数限制实现代码
2009/12/07 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
webpack源码之loader机制详解
2018/04/06 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
2020/08/06 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python3.0 字典key排序
2008/12/24 Python
Python中暂存上传图片的方法
2015/02/18 Python
python中os模块详解
2016/10/14 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
Django发送邮件功能实例详解
2019/09/02 Python
Tensorflow 多线程设置方式
2020/02/06 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
2020/03/19 Python
python实现程序重启和系统重启方式
2020/04/16 Python
html5时钟实现代码
2010/10/22 HTML / CSS
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
办公室助理岗位职责
2013/12/25 职场文书
总经理任命书范本
2014/06/05 职场文书
行政文员岗位职责
2015/02/04 职场文书
Python集合set()使用的方法详解
2022/03/18 Python
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript