标签: parallel-coordinates

Matplotlib中的平行坐标图

可以使用传统的绘图类型相对直观地查看二维和三维数据.即使使用四维数据,我们也经常可以找到显示数据的方法.但是,高于4的尺寸变得越来越难以显示.幸运的是,平行坐标图提供了一种查看更高维度结果的机制.

来自维基百科的示例平行坐标图

几个绘图包提供了平行坐标图,例如Matlab,R,VTK类型1VTK类型2,但我没有看到如何使用Matplotlib创建一个.

  1. Matplotlib中是否有内置的平行坐标图?我当然没有在画廊看到一个.
  2. 如果没有内置类型,是否可以使用Matplotlib的标准功能构建平行坐标图?

编辑:

根据以下振亚提供的答案,我开发了以下支持任意数量轴的概括.按照我在上面原始问题中发布的示例的绘图样式,每个轴都有自己的比例.我通过对每个轴点的数据进行归一化并使轴的范围为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 …
Run Code Online (Sandbox Code Playgroud)

python matplotlib parallel-coordinates

47
推荐指数
5
解决办法
3万
查看次数

ggplot/GGally - 平行坐标 - y轴标签

有谁知道是否有办法ggparcoord在GGally中为函数添加变量标签?我尝试了很多方法geom_text,但没有任何结果.

为了更明确,我希望row.names(mtcars)通过geom_text.我可以区分汽车的唯一方法是row.names(mtcars)通过groupColumn论证,但我不喜欢这种看法.

不起作用:

mtcars$carName <- row.names(mtcars) # This becomes column 12
library(GGally)
# Attempt 1
ggparcoord(mtcars, 
           columns = c(12, 1, 6), 
           groupColumn = 1) +
geom_text(aes(label = carName))

# Attempt 2
ggparcoord(mtcars, 
           columns = c(12, 1, 6),
           groupColumn = 1,
           mapping = aes(label = carName))
Run Code Online (Sandbox Code Playgroud)

任何想法,将不胜感激!

r data-visualization ggplot2 parallel-coordinates

9
推荐指数
1
解决办法
840
查看次数

dplyr掩盖GGally并打破ggparcoord

给定一个新的会话,执行函数文档中提供的小ggparcoord(.)示例

library(GGally)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此输入图像描述

再次,从一个新的会话开始并使用加载的dplyr执行相同的脚本

library(GGally)
library(dplyr)

data(diamonds, package="ggplot2")
diamonds.samp <- diamonds[sample(1:dim(diamonds)[1], 100), ]
ggparcoord(data = diamonds.samp, columns = c(1, 5:10))
Run Code Online (Sandbox Code Playgroud)

结果是:

错误:(列表)对象无法强制输入'double'

需要注意的是顺序库()语句也没有关系.

问题

  1. 代码示例有问题吗?
  2. 有没有办法克服这个问题(通过一些命名空间函数)?
  3. 或者这是一个错误?

我需要更大的分析中的dplyrggparcoord(.),但这个最小的例子反映了我面临的问题.

版本

  • R @ 3.2.3
  • dplyr @ 0.4.3
  • GGally @ 1.0.1
  • ggplot @ 2.0.0

UPDATE

将Joran给出的优秀答案包括起来:

答案

  1. 代码示例实际上是错误的,因为ggparcoord(.)期望data.frame不是钻石数据集给出的tbl_df(如果加载了dplyr).
  2. 问题是由强迫的解决tbl_df到 …

r ggplot2 dplyr parallel-coordinates ggally

9
推荐指数
1
解决办法
411
查看次数

并行coord plot ggplot2已弃用?

当我尝试在ggplot2中创建一个并行坐标时,我得到了一个不推荐使用的消息:

require(ggplot2)
ggpcp(mtcars) + geom_line()
Run Code Online (Sandbox Code Playgroud)

警告消息:不推荐使用'ggpcp'.请参阅帮助("已弃用")

然而,ggplot文档没有说明这一点:http://docs.ggplot2.org/current/ggpcp.html .

某个地方有新的pcp功能吗?

r ggplot2 parallel-coordinates

8
推荐指数
1
解决办法
1961
查看次数

d3js Parallel坐标分类数据

我正在寻找一种向d3js平行坐标添加分类数据的方法.D3js对我来说是新手,我可以理解正在做的一些事情,但却无法找到一种方法.并行集不是一个好选择,因为我的大部分数据都是连续的.

如果您考虑汽车示例,我希望能够按轴上的品牌进行过滤(例如过滤器,以便仅显示福特上的数据).我假设需要一个变量来定义每辆车(例如标致,福特,宝马,奥迪等......)

这是汽车的例子.

http://bl.ocks.org/1341281

感谢任何响应的人.

javascript d3.js parallel-coordinates

7
推荐指数
1
解决办法
4809
查看次数

如何使用包含字符串的某些列在 Pandas DataFrame 上绘制平行坐标?

我想为pandas包含带有数字的列和其他包含字符串作为值的列的DataFrame绘制平行坐标。

问题描述

我有以下测试代码,用于绘制带有数字的平行坐标:

import pandas as pd
import matplotlib.pyplot as plt
from pandas.tools.plotting import parallel_coordinates

df = pd.DataFrame([["line 1",20,30,100],\
    ["line 2",10,40,90],["line 3",10,35,120]],\
    columns=["element","var 1","var 2","var 3"])
parallel_coordinates(df,"element")
plt.show()
Run Code Online (Sandbox Code Playgroud)

最终显示以下图形: 在此处输入图片说明

但是,我想尝试的是向我的绘图中添加一些带有字符串的变量。但是当我运行以下代码时:

df2 = pd.DataFrame([["line 1",20,30,100,"N"],\
    ["line 2",10,40,90,"N"],["line 3",10,35,120,"N-1"]],\
    columns=["element","var 1","var 2","var 3","regime"])
parallel_coordinates(df2,"element")
plt.show()
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError:float() 的无效文字:N

我想这意味着parallel_coordinates函数不接受字符串。

我正在尝试做的示例

我正在尝试做类似这个例子的事情,其中​​种族和性别是字符串而不是数字:

包含字符串值的平行坐标图

有没有办法使用 执行这样的图形pandas parallel_coordinates?如果没有,我怎么能尝试这样的图形?也许与matplotlib

我必须提到我特别在Python 2.5下寻找 带有 pandas 版本的解决方案0.9.0

python matplotlib dataframe pandas parallel-coordinates

5
推荐指数
1
解决办法
1万
查看次数

在Javascript中加载多个CSV文件

我有点困惑我需要使用javascript加载多个CSV文件,我需要更改加载的每个数据集的一些属性.所以基本上我使用这个名为d3的框架,我想加载3个csv文件,然后对于每个csv文件,我需要更改为平行坐标图绘制的线条颜色.目前我正在使用三个数据加载,但这会弄乱我的情节,我的价值已经全部结束.

 // load csv file and create the chart
d3.csv('X.csv', function(data) {
pc = d3.parallelCoordinates()("parallelcoordinates")
    .data(data)
    .color(color)
    .alpha(0.4)
    .render()
    .brushable()  // enable brushing
    .interactive()  // command line mode

var explore_count = 0;
var exploring = {};
var explore_start = false;
pc.svg
    .selectAll(".dimension")
    .style("cursor", "pointer")
    .on("click", function(d) {
        exploring[d] = d in exploring ? false : true;
        event.preventDefault();
        if (exploring[d]) d3.timer(explore(d,explore_count,pc));
});
Run Code Online (Sandbox Code Playgroud)

我做了以上三次.现在发生的是,所有数据都绘制在同一个图形上,但随后值重叠(基本上它们的三个图形在彼此之上).我希望将它集成在一起,我认为最好的方法是巧妙地加载JS文件并以某种方式操作它.我不知道怎么回事.有人会告诉我我将如何实现这一目标吗?

javascript csv d3.js parallel-coordinates

3
推荐指数
1
解决办法
3473
查看次数

更改 Plotly 并行类别中分类条的顺序

我试图将基因表达的变化可视化为不同时间点的分类变量(向上、向下、无变化)。

我有一个描述差异表达数据的数据框,如下所示:

data = {'gene':['Svm3G0018840','Svm5G0011050','Svm9G0059770'],
        '01h': ['nc','up','down'], '04h': ['up', 'down', 'nc'],'08h':['nc','down','up']}
df=pd.DataFrame.from_dict(data)
df=df.set_index('gene')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我可以使用此 df 使用以下代码创建并行图:

fig = px.parallel_categories(herbdf, dimensions=['01h', '04h', '08h','24h','48h'],
                labels={'01h':'', '04h':'', '08h':'','24h':'','48h':''})

fig.show()
Run Code Online (Sandbox Code Playgroud)

然而,每个时间点的类别(上、下、NC)并不总是相同的顺序,这使得该图非常难以阅读。我可以在笔记本的交互式图形中更改此设置,但我只能选择将校正后的图形输出为低质量 png。我需要 svg 格式的图像,这意味着我需要使用以下行:

fig.write_image("/figs/herb_de_pp.svg")
Run Code Online (Sandbox Code Playgroud)

但是当我在代码块中添加这一行来保存图形时,我无法控制分类框最终的顺序:

在此输入图像描述

我尝试添加fig.update_行来解决这个问题,例如:

fig.update_layout(xaxis={'categoryorder':'total descending'})
Run Code Online (Sandbox Code Playgroud)

但这似乎根本没有改变输出。

我可能会错过一些简单的东西 - 任何帮助将不胜感激!

dataframe plotly parallel-coordinates plotly-python

2
推荐指数
1
解决办法
1396
查看次数

如何在ggplot2中创建多个y轴(每个变量一个)

我想绘制一个类似于平行坐标图的图来进行描述性统计。我想绘制按性别分层的每个变量的平均值和标准差。

在此输入图像描述

不幸的是,我无法找到为每个变量创建自己的 y 轴的方法。

它看起来应该与此图类似,但使用平均值和标准差而不是每一行。

在此输入图像描述

这篇文章中,他们创建了另一个图,但我无法根据我的需求和数据进行调整,因此平均值和标准差如上图所示。

这是我的数据和代码:


library(dplyr)
library(tidyr)
library(ggplot2)

my_data <- data.frame(
  sex = c("m", "w", "m", "w", "m", "w"),
  age = c(25, 30, 22, 35, 28, 46),
  testosterone = c(450, 200, 400, 300, 500, 350),
  cognition = c(75, 80, 70, 85, 78, 90),
  estrogen = c(20, 40, 15, 50, 10, 45)
)

numeric_vars <- c("age", "testosterone", "cognition", "estrogen")

# Calculate means and standard deviations for each sex and each variable
df_means <- my_data %>%
  group_by(sex) %>% …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 parallel-coordinates

1
推荐指数
1
解决办法
83
查看次数