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实现检测服务器是否可以ping通的2种方法
Jan 01 Python
在Python中使用第三方模块的教程
Apr 27 Python
python基于Tkinter库实现简单文本编辑器实例
May 05 Python
Python中的左斜杠、右斜杠(正斜杠和反斜杠)
Aug 30 Python
Python 中迭代器与生成器实例详解
Mar 29 Python
人工智能最火编程语言 Python大战Java!
Nov 13 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
Python代码块批量添加Tab缩进的方法
Jun 25 Python
python pytest进阶之fixture详解
Jun 27 Python
python3模拟实现xshell远程执行liunx命令的方法
Jul 12 Python
python shell命令行中import多层目录下的模块操作
Mar 09 Python
Python中的xlrd模块使用整理
Jun 15 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
php中的比较运算符详解
2013/10/28 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
无语,javascript居然支持中文(unicode)编程!
2007/04/12 Javascript
Javascript根据指定下标或对象删除数组元素
2012/12/21 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
jQuery 计算iframe 窗口大小的方法
2014/05/13 Javascript
js网页滚动条滚动事件实例分析
2015/05/05 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
微信通过页面(H5)直接打开本地app的解决方法
2017/09/09 Javascript
socket在egg中的使用实例代码详解
2019/05/30 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
使用Vant完成通知栏Notify的提示操作
2020/11/11 Javascript
Django Highcharts制作图表
2016/08/27 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python实现K折交叉验证法的方法步骤
2019/07/11 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
python计算二维矩形IOU实例
2020/01/18 Python
浅谈tensorflow 中的图片读取和裁剪方式
2020/06/30 Python
python全栈开发语法总结
2020/11/22 Python
Smilodox官方运动服装店:从运动服到健身配件
2020/08/27 全球购物
水产养殖学应届生求职信
2013/09/29 职场文书
传播学毕业生求职信
2013/10/11 职场文书
超市营业员岗位职责
2013/12/20 职场文书
知识竞赛活动方案
2014/02/18 职场文书
售后求职信范文
2014/03/15 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
领导欢迎词致辞
2015/01/23 职场文书
同意离婚答辩状
2015/05/22 职场文书
教师节随笔
2015/08/15 职场文书
百善孝为先:关于孝道的经典语录
2019/10/18 职场文书
python缺失值填充方法示例代码
2022/12/24 Python