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 27 Python
python之PyMongo使用总结
May 26 Python
Anaconda 离线安装 python 包的操作方法
Jun 11 Python
Python实现的tcp端口检测操作示例
Jul 24 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
Mar 01 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
numpy中三维数组中加入元素后的位置详解
Nov 28 Python
python TCP包注入方式
May 05 Python
在Python3.74+PyCharm2020.1 x64中安装使用Kivy的详细教程
Aug 07 Python
matplotlib阶梯图的实现(step())
Mar 02 Python
python基于tkinter实现gif录屏功能
May 19 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
WordPress的文章自动添加关键词及关键词的SEO优化
2016/03/01 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
laravel中Redis队列监听中断的分析
2020/09/14 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/20 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
js实现鼠标感应向下滑动隐藏菜单的方法
2015/02/20 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
关于JSON与JSONP简单总结
2016/08/16 Javascript
简单学习vue指令directive
2016/11/03 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
React Navigation 使用中遇到的问题小结
2018/05/08 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
Vue编程式跳转的实例代码详解
2019/07/10 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
2020/04/16 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
python基础教程之常用运算符
2014/08/29 Python
Python自动重试HTTP连接装饰器
2015/04/28 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
python实现转盘效果 python实现轮盘抽奖游戏
2019/01/22 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python3自动生成MySQL数据字典的markdown文本的实现
2020/05/07 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
2014年教研员工作总结
2014/12/23 职场文书
优秀班组事迹材料
2014/12/24 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
幼儿园托班教育随笔
2015/08/14 职场文书
周一给客户的问候语
2015/11/10 职场文书
党员心得体会范文2016
2016/01/23 职场文书
初二物理教学反思
2016/02/19 职场文书
详解MySql中InnoDB存储引擎中的各种锁
2022/02/12 MySQL
Python中三种花式打印的示例详解
2022/03/19 Python