R ggVis:在不同的数据集上创建具有多个图层的绘图

R ggVis:在不同的数据集上创建具有多个图层的绘图,r,ggplot2,ggvis,R,Ggplot2,Ggvis,我正在尝试使用ggvis复制ggplot2绘图。 该图旨在表示点的坐标(通过对应分析)及其簇(hclust)标准色散椭圆 TL;博士 我想基于多个数据集制作一个多层次的ggvis图。 因此,功能/管道方法阻止我将一个层分组,而不是将另一个层分组 整个(简要注释)代码都在那里: 以下是创建数据的代码: a <- rnorm(n = 100, mean = 50, sd = 5) b <- rnorm(n = 100, mean = 50, sd = 5) c <-

我正在尝试使用ggvis复制ggplot2绘图。 该图旨在表示点的坐标(通过对应分析)及其簇(hclust)标准色散椭圆


TL;博士 我想基于多个数据集制作一个多层次的ggvis图。 因此,功能/管道方法阻止我将一个层分组,而不是将另一个层分组

整个(简要注释)代码都在那里:


以下是创建数据的代码:

 a <- rnorm(n = 100, mean = 50, sd = 5)

 b <- rnorm(n = 100, mean = 50, sd = 5)

 c <- rnorm(n = 100, mean = 50, sd = 5)

 mydf <- data.frame(A = a, B = b, C = c, row.names = c(1:100))

 library(ade4)

 myCA <- dudi.coa(df = mydf,scannf = FALSE,  nf = 2)

 myDist <- dist.dudi(myCA, amongrow = TRUE)

 myClust <- hclust(d = myDist, method = "ward.D2")

 myClusters <- cutree(tree = myClust, k = 3)

 myCAdata <- data.frame(Axis1 = myCA$li$Axis1, Axis2 = myCA$li$Axis2, Cluster = as.factor(myClusters))

 library(ellipse) # Compute Standard Deviation Ellipse

 df_ellipse <- data.frame()

 for(g in levels(myCAdata$Cluster)){
   df_ellipse <- rbind(df_ellipse,
                 cbind(as.data.frame(
                 with(myCAdata[myCAdata$Cluster==g,],
                 ellipse(cor(Axis1, Axis2),
                 level=0.7,
                 scale=c(sd(Axis1),sd(Axis2)),
                 centre=c(mean(Axis1),mean(Axis2))))),
                 Cluster=g))
 }

a问题在于,当您尝试将两者结合起来时,您没有在省略号数据集上按
集群对u进行分组。要使其工作,您需要执行以下操作:

myFullPlot <- ggvis(data = df_ellipse, x = ~x, y = ~ y) %>% group_by(Cluster) %>%

  layer_paths(stroke = ~Cluster, strokeWidth := 1) %>%

  layer_points(x = ~Axis1, y= ~Axis2, size := 15, fill= ~Cluster, data = ggDF)

myFullPlot
myFullPlot%分组依据(群集)%>%
层路径(笔划=~簇,笔划宽度:=1)%>%
图层点(x=~Axis1,y=~Axis2,大小:=15,填充=~Cluster,数据=ggDF)
myFullPlot

这样你就能得到你想要的图形


另外,我假设您的数据创建中存在一些随机性,因为我得到的数据集与您的不同。

非常感谢LyzandeR,它的工作方式与预期的一样。当然,我曾试着把小组放在旁边,但显然没有放在正确的位置上。对于数据,它是基于rnorm的(基于这篇文章),因此很容易复制,但当然,数据在这里并不重要,只有方法。
library(ggvis)

all_values <- function(x) { paste0(names(x), ": ", format(x), collapse = "<br />")}

 ggDF <- myCAdata

 ggDF$name <- row.names(ggDF)

## Coordinates plot
myCoordPlot <- ggvis(x = ~Axis1, y = ~Axis2, key := ~name, data = ggDF) %>%

  layer_points(size := 15, fill= ~Cluster, data = ggDF) %>%

  add_tooltip(all_values, "hover")

 myCoordPlot
 myEllPlot <- ggvis(data = df_ellipse, x = ~x,  y = ~ y) %>%

  group_by(Cluster) %>%

  layer_paths(x= ~x, y= ~y, stroke = ~Cluster, strokeWidth := 1)

 myEllPlot
 myFullPlot <- ggvis(data = df_ellipse, x = ~x,  y = ~ y) %>%

 layer_paths(x= ~x, y= ~y, stroke = ~Cluster, strokeWidth := 1) %>%

 layer_points(x = ~Axis1, y= ~Axis2, size := 15, fill= ~Cluster, data = ggDF) %>%

 add_tooltip(all_values, "hover")

 myFullPlot
myFullPlot <- ggvis(data = df_ellipse, x = ~x, y = ~ y) %>% group_by(Cluster) %>%

  layer_paths(stroke = ~Cluster, strokeWidth := 1) %>%

  layer_points(x = ~Axis1, y= ~Axis2, size := 15, fill= ~Cluster, data = ggDF)

myFullPlot