按颜色组在 packcircle 函数中生成的分组图

Grouping plot generated in packcircle function by color groups

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

到目前为止,我已经做到了这一点,使用 R 中的 packcircles 函数:

如何"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())

提前致谢。

我认为这样做的方法实际上是在将包装与数据绑定之前沿您想要的轴排序包装。和你一样做,但沿着 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)

我得到了这个

包装的初始顺序是增加 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())