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中吸引人的一些特性
Apr 09 Python
使用python生成目录树
Mar 29 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
python图形工具turtle绘制国际象棋棋盘
May 23 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
python标准库sys和OS的函数使用方法与实例详解
Feb 12 Python
pymysql 插入数据 转义处理方式
Mar 02 Python
python 实现端口扫描工具
Dec 18 Python
python 如何获取页面所有a标签下href的值
May 06 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
PHP 执行系统外部命令 system() exec() passthru()
2009/08/11 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
JavaScript的Function详细
2006/11/14 Javascript
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
javascript 数组操作详解
2015/01/29 Javascript
jQuery实现动画效果circle实例
2015/08/06 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
Javascript中的作用域及块级作用域
2017/12/08 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
BootStrap modal实现拖拽功能
2018/12/01 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
Python深入学习之装饰器
2014/08/31 Python
python实现根据图标提取分类应用程序实例
2014/09/28 Python
python学习必备知识汇总
2017/09/08 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
Linux面试题LINUX系统类
2014/11/19 面试题
2014年图书室工作总结
2014/12/09 职场文书
python如何利用cv2.rectangle()绘制矩形框
2022/12/24 Python