gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:02:26 24 4
gpt4 key购买 nike

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

circular scatterplot

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

circular scatterplot attempt

如何将不同的颜色“组合”在一起?由于我使用的是 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())

提前致谢。

最佳答案

我认为实现它的方法实际上是在将包装与数据绑定(bind)之前沿您想要的轴排列包装。和你一样做,但沿着 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,即距圆心的距离。当你绑定(bind)它时,你会沿着这个坐标顺序分布你的组,即同心圆。通过改变顺序,你改变了你在圆上的分布。

您当然可以沿着 y 打包,甚至您可以考虑沿着角度打包,方法是使用 atan2 函数计算它并在绑定(bind)之前沿着角度排序:

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

关于r - 按颜色组在 packcircle 函数中生成的分组图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49746081/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com