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 相关文章推荐
基于Django contrib Comments 评论模块(详解)
Dec 08 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python使用 zip 同时迭代多个序列示例
Jul 06 Python
pandas 时间格式转换的实现
Jul 06 Python
Python实现简单的列表冒泡排序和反转列表操作示例
Jul 10 Python
利用python在excel中画图的实现方法
Mar 17 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Python生成并下载文件后端代码实例
Aug 31 Python
详解BeautifulSoup获取特定标签下内容的方法
Dec 07 Python
pytorch中Schedule与warmup_steps的用法说明
May 24 Python
详解在OpenCV中如何使用图像像素
Mar 03 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中全局变量global的使用演示代码
2011/05/18 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
JavaScript多线程的实现方法
2007/05/08 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
JavaScript获取按钮所在form表单id的方法
2015/04/02 Javascript
js实现头像图片切割缩放及无刷新上传图片的方法
2015/07/17 Javascript
js鼠标点击图片切换效果实现代码
2015/11/19 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
vue2.0 和 animate.css的结合使用
2017/12/12 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
vue 项目地址去掉 #的方法
2018/10/20 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
Python深入学习之对象的属性
2014/08/31 Python
20招让你的Python飞起来!
2016/09/27 Python
Python中几种导入模块的方式总结
2017/04/27 Python
python读取csv文件并把文件放入一个list中的实例讲解
2018/04/27 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
西式婚礼主持词
2014/03/13 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
Python中zipfile压缩包模块的使用
2021/05/14 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python