使用传统的绘图类型可以相对直观地查看二维和三维数据。即使是四维数据,我们也经常能找到显示数据的方法。不过,4维以上的维度越来越难以显示。幸运的是,parallel coordinates plots提供了一种查看高维结果的机制。

有几个绘图包提供平行坐标绘图,例如Matlab、R、VTK type 1和VTK type 2,但我不知道如何使用Matplotlib创建一个。Matplotlib中是否有内置的平行坐标图?我当然看不到。

如果没有内置类型,是否可以使用Matplotlib的标准功能生成平行坐标图?

编辑:

基于下面的Zhenya提供的答案,我开发了以下支持任意轴数的泛化。按照我在上面原始问题中发布的示例的打印样式,每个轴都有自己的比例。我通过规范化每个轴点的数据并使轴的范围为0到1来实现这一点。然后我回去给每个记号贴上标签,在截距处给出正确的值。

该函数通过接受一组数据集来工作。每个数据集被视为一组点,其中每个点位于不同的轴上。__main__中的示例为两组30行中的每个轴获取随机数。这些行在导致行聚集的范围内是随机的;我想验证这一行为。

这个解决方案不如内置的解决方案,因为您有奇怪的鼠标行为,我通过标签伪造数据范围,但是在Matplotlib添加内置解决方案之前,这是可以接受的。#!/usr/bin/python

import matplotlib.pyplot as plt

import matplotlib.ticker as ticker

def parallel_coordinates(data_sets, style=None):

dims = len(data_sets[0])

x = range(dims)

fig, axes = plt.subplots(1, dims-1, sharey=False)

if style is None:

style = ['r-']*len(data_sets)

# Calculate the limits on the data

min_max_range = list()

for m in zip(*data_sets):

mn = min(m)

mx = max(m)

if mn == mx:

mn -= 0.5

mx = mn + 1.

r = float(mx - mn)

min_max_range.append((mn, mx, r))

# Normalize the data sets

norm_data_sets = list()

for ds in data_sets:

nds = [(value - min_max_range[dimension][0]) /

min_max_range[dimension][2]

for dimension,value in enumerate(ds)]

norm_data_sets.append(nds)

data_sets = norm_data_sets

# Plot the datasets on all the subplots

for i, ax in enumerate(axes):

for dsi, d in enumerate(data_sets):

ax.plot(x, d, style[dsi])

ax.set_xlim([x[i], x[i+1]])

# Set the x axis ticks

for dimension, (axx,xx) in enumerate(zip(axes, x[:-1])):

axx.xaxis.set_major_locator(ticker.FixedLocator([xx]))

ticks = len(axx.get_yticklabels())

labels = list()

step = min_max_range[dimension][2] / (ticks - 1)

mn = min_max_range[dimension][0]

for i in xrange(ticks):

v = mn + i*step

labels.append('%4.2f' % v)

axx.set_yticklabels(labels)

# Move the final axis' ticks to the right-hand side

axx = plt.twinx(axes[-1])

dimension += 1

axx.xaxis.set_major_locator(ticker.FixedLocator([x[-2], x[-1]]))

ticks = len(axx.get_yticklabels())

step = min_max_range[dimension][2] / (ticks - 1)

mn = min_max_range[dimension][0]

labels = ['%4.2f' % (mn + i*step) for i in xrange(ticks)]

axx.set_yticklabels(labels)

# Stack the subplots

plt.subplots_adjust(wspace=0)

return plt

if __name__ == '__main__':

import random

base = [0, 0, 5, 5, 0]

scale = [1.5, 2., 1.0, 2., 2.]

data = [[base[x] + random.uniform(0., 1.)*scale[x]

for x in xrange(5)] for y in xrange(30)]

colors = ['r'] * 30

base = [3, 6, 0, 1, 3]

scale = [1.5, 2., 2.5, 2., 2.]

data.extend([[base[x] + random.uniform(0., 1.)*scale[x]

for x in xrange(5)] for y in xrange(30)])

colors.extend(['b'] * 30)

parallel_coordinates(data, style=colors).show()

编辑2:

下面是一个在绘制Fisher's Iris data时从上述代码中得到的结果的示例。它不像维基百科上的参考图片那么好,但是如果你只有Matplotlib并且你需要多维图的话,它是可以接受的。

python画平行坐标图_Matplotlib中的平行坐标图相关推荐

  1. python画平行坐标图_Python实现平行坐标图的两种方法小结

    怎么用python实现一个坐标图的平移和缩放最容易想到的应该是DP算法,即取初始轨迹的起点A和终点B连线,计算每个点到这条线的距离,距离最大的点C若小于要分享误差则结束: 否则将C点加入压缩后的数据集 ...

  2. python画平行坐标图_[宜配屋]听图阁

    平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Pytho ...

  3. python三维数据图_matplotlib中三维数据的热图

    我想用我的三维数据生成一张热图.在 我已经能够用这些数据绘制出trisurf.在 有人能帮我制作热图吗?我看到了在线教程,但是它们对3D来说都很复杂,我在这个网站上找到了一个在matplotlib中生 ...

  4. python画波浪线_matplotlib中的锯齿形或波浪线

    是的,但它有一点点后果.最简单的方法是在matplotlib中使用xkcd模式. import numpy as np import matplotlib.pyplot as plt plt.xkcd ...

  5. Python实现平行坐标图的两种方式

    平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Pytho ...

  6. Python实现平行坐标图的绘制(plotly)

    平行坐标图简介 当数据的维度超过三维时,此时数据的可视化就变得不再那么简单.为解决高维数据的可视化问题,我们可以使用平行坐标图.以下关于平行坐标图的解释引自百度百科:为了克服传统的笛卡尔直角坐标系容易 ...

  7. python 画三维函数图-Python画三维图-----插值平滑数据

    一.二维的插值方法: 原始数据(x,y) 先对横坐标x进行扩充数据量,采用linspace.[如下面例子,由7个值扩充到300个] 采用scipy.interpolate中的spline来对纵坐标数据 ...

  8. python画画用哪个软件_如何用python画韦恩图? 使用python的tutul工具,画一朵雏菊花...

    使用python的tutul工具,画一朵雏菊花 如何用python画韦恩图?不管什么时候,给心留一点空间.人生一世,不用什么都要去争,不是什么都要去抢,欲望少一点,满足多一点,这样才会活得潇洒一点,人 ...

  9. python画折线图代码-python画折线示意图实例代码

    python画折线图方法 前做PPT要用到折线图,嫌弃EXCEL自带的看上去不好看,就用python写了一个画折线图的程序. import matplotlib.pyplot as plt x=[1, ...

最新文章

  1. 为什么阿里巴巴不建议在for循环中使用+进行字符串拼接
  2. 数组shift方法_数组shift()方法以及JavaScript中的示例
  3. 《Python Cookbook 3rd》笔记(4.12):不同集合上元素的迭代
  4. django-orm查询-验证是否存在的方式
  5. Python3解析XML文件(xml.etree.ElementTree)——以简单网络爬虫为例
  6. 民科微服务小程序怎么注册_民科微服务小程序(医师护士电子化注册系统入口)公众号...
  7. linux apache smtp,Linux 使用msmtp 发送邮件
  8. PHP的HashTable实现
  9. php+ajax+打开新页面跳转,ajax怎样跳转到新的jsp页面(附代码)
  10. VBS 访问WMI读取IP地址,并将其设置为静态IP
  11. java获取微信用户信息(UnionID)
  12. php word转html
  13. js中最重要的是:原型对象 普通对象和函数对象 构造函数
  14. [WebGL入门]三十一,Quaternions(四元数)
  15. xml和html的区别和联系
  16. Zabbix企业微信告警最新版
  17. 某电商客户数据价值分析项目
  18. 搭建在线网校平台的三个好处
  19. C#+Selenium+Nunit demo
  20. soso地图api接口poi检索示例----并在信息框显示经纬度

热门文章

  1. 秒懂servletContext对象
  2. 一天1个机器学习知识点(二)
  3. JUC 中的多线程协作工具类:CountDownLatch 和 CyclicBarrier
  4. Java 开发提升十倍生产力:idea 远程一键部署 springboot 到 Docker
  5. 几个面试官常问的垃圾回收器,下次面试就拿这篇文章怼回去!
  6. touch: cannot touch /usr/local/tomcat/logs/catalina.out: Permission denied解决方法
  7. HashMap中提到的散列是什么?
  8. oracle中快速复制数据表(创建数据表)
  9. cropbox php,jQuery用户头像裁剪插件cropbox.js实例分享
  10. Springboot制作小网盘系统(小项目)