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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
python实现dnspod自动更新dns解析的方法
Feb 14 Python
使用Python的Treq on Twisted来进行HTTP压力测试
Apr 16 Python
在Python中使用zlib模块进行数据压缩的教程
Jun 26 Python
numpy返回array中元素的index方法
Jun 27 Python
python绘制立方体的方法
Jul 02 Python
Python的argparse库使用详解
Oct 09 Python
python函数的作用域及关键字详解
Aug 20 Python
python用requests实现http请求代码实例
Oct 31 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
通过实例解析Python return运行原理
Mar 04 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 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
MYSQL数据库初学者使用指南
2006/11/16 PHP
使用PHP破解防盗链图片的一个简单方法
2014/06/07 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
[原创]php使用strpos判断字符串中数字类型子字符串出错的解决方法
2017/04/01 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
通过修改referer下载文件的方法
2008/05/11 Javascript
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
Angular.Js中过滤器filter与自定义过滤器filter实例详解
2017/05/08 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
彻底理解js面向对象之继承
2018/02/04 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
解决ng-repeat产生的ng-model中取不到值的问题
2018/10/02 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
js实现简单的秒表
2020/01/16 Javascript
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
解决Pycharm运行时找不到文件的问题
2018/10/29 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
解决Django一个表单对应多个按钮的问题
2019/07/18 Python
基于python实现雪花算法过程详解
2019/11/16 Python
利用Python绘制Jazz网络图的例子
2019/11/21 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
python 深度学习中的4种激活函数
2020/09/18 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
中国央视网签名寄语
2014/01/18 职场文书
学习决心书
2014/03/11 职场文书
2014年幼儿园教研工作总结
2014/12/04 职场文书
python编程实现清理微信重复缓存文件
2021/11/01 Python
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL