通过颜色组对packcircle函数中生成的图进行分组

时间:2018-04-10 05:39:52

标签: r plot ggplot2 circle-pack

我想创建一个类似于此的图,其中每个点代表特定类型的唯一数据点(例如,红色组或蓝色组),并且每个组的点形成圆形形状。

circular scatterplot

到目前为止,我已经使用R:

中的packcircles函数了解了这一点

circular scatterplot attempt

我如何" group"不同的颜色在一起?因为我正在使用packcircle函数,所以从中心绘制圆圈然后向外螺旋,因此对点进行排序会对它们进行分组,但我更喜欢与上面提供的示例更相似的内容。

这是我用来生成情节的代码

library(packcircles)
library(ggplot2)
library(plyr)
library(dplyr)

示例数据

data <- data.frame(group=paste("Group", letters[1:4]), value=rep(1,100))
data <- data[order(data$group), ]

使用R

中的packcircles函数生​​成布局
packing <- circleProgressiveLayout(data$value, sizetype = "area")
id <- data$group
packing <- cbind(id,packing)
dat.gg <- circleLayoutVertices(packing, idcol=1, xysizecols=2:4, npoints=1)

使用ggplot2制作情节

ggplot() + 
geom_point(data = dat.gg, aes(x,y, colour=factor(id))) +
           theme_minimal()  +
           theme(legend.position="none",
                 panel.grid.major=element_blank(),
                 panel.grid.minor=element_blank(),
                 axis.text=element_blank())

提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为实现这一目标的方法实际上是在将数据绑定到数据之前沿着您想要的轴排序。和你一样做,但是按照x:

订购包装
packing <- circleProgressiveLayout(data$value, sizetype = "area")
packing <- packing[order(packing$x),]
id <- data$group
packing <- cbind(id,packing)
dat.gg <- circleLayoutVertices(packing, idcol=1, xysizecols=2:4, npoints=1)

我得到了这个

enter image description here

包装的初始排序是增加x ^ 2 + y ^ 2,即距离圆心的距离。当你绑定它时,你沿着这个坐标排列分布你的组,即同心圆。通过更改顺序,您可以更改圆圈上的分布。

你当然可以沿着y包装,或者你甚至可以考虑沿着角度打包,通过使用atan2函数计算它并在绑定前沿角度排序:

packing <- circleProgressiveLayout(data$value, sizetype = "area")
packing$theta <- atan2(packing$y,packing$x)
packing <- packing[order(packing$theta),]
id <- data$group
packing <- cbind(id,packing)
dat.gg <- circleLayoutVertices(packing, idcol=1, xysizecols=2:4, npoints=1)

ggplot() + 
  geom_point(data = dat.gg, aes(x,y, colour=factor(id))) +
  theme_minimal()  +
  theme(legend.position="none",
        panel.grid.major=element_blank(),
        panel.grid.minor=element_blank(),
        axis.text=element_blank())

enter image description here