我想出了一种方法来实现这一点,但它需要大量的猜测,并且所有的Venn或Euler图表包似乎只允许您将总出现次数放在圆圈内。
数据:
name=c('itm1','itm2','itm3','itm4','itm5','itm6','itm7','itm8','itm9','itm0')
x=c(5,2,3,5,6,7,7,8,9,2)
y=c(6,9,9,7,6,5,2,3,2,4)
z=data.frame(name,x,y)
plot(z$x,z$y,type='n')
text(z$x,z$y,z$name)
par(new=T)
symbols(3,7,circles=2.5,add=T,bg='#34692499',inches=F)
symbols(6,6,circles=1.5,add=T,bg='#64392499',inches=F)
symbols(8,3,circles=2,add=T,bg='#24399499',inches=F)
因此,这是一个非常繁琐的过程,为每个项目提供x和y坐标,然后猜测放置圆圈的位置以及给出它们的半径。
理想情况下,我想使用我最初拥有的数据集,如下所示:
cat1=c('itm2','itm3','itm0')
cat2=c('itm1','itm4','itm5','itm6')
cat3=c('itm6','itm7','itm8','itm9')
然后只需将点分配到右侧圆圈即可。有没有更好的方法呢?
答案 0 :(得分:3)
我的感觉,基于线程讨论是建议使用UnSetR R包?
好的,为什么?我个人的感觉是,如果我们有超过五或七组,维恩图方法就会崩溃。有关此背景下可用的各种选项的概述,我建议您查看:
我认为另一个有用的网站是:
他们一起对可用选项进行了很好的报道。
因此,我的感觉是,如果集合的数量超过一个平凡的阈值,这里的核心挑战是集合交叉点数量的组合爆炸。那怎么解决?
嗯,UnSet专注于创建数据关系的任务驱动的聚合视图,它传达聚合和交叉的大小和属性。对我来说至少这似乎是一种更好的方式 - 这是一个建议。
这至少是一种替代方法 - 我希望它有所帮助。
目前有四个小插图解释了如何使用UpSetR包中包含的功能:
if (!require(UpSetR)) install.packages("UpSetR")
movies <- read.csv(system.file("extdata", "movies.csv", package = "UpSetR"),
header = T, sep = ";")
upset(movies, nsets = 6, number.angles = 30, point.size = 3.5, line.size = 2,
mainbar.y.label = "Genre Intersections", sets.x.label = "Movies Per Genre",
text.scale = c(1.3, 1.3, 1, 1, 2, 0.75))
upset(movies, sets = c("Action", "Adventure", "Comedy", "Drama", "Mystery",
"Thriller", "Romance", "War", "Western"), mb.ratio = c(0.55, 0.45), order.by = "freq")
答案 1 :(得分:0)
如果您不介意手动执行此操作,则可以使用locator
来加快处理速度:
points <- locator(2)
# click first at the circle centre, then somewhere on the circle edge
symbols(points$x[1], points$y[1],
circles = sqrt(sum(points$x - points$y)^2),
add = TRUE, bg = alpha('orange', .2), inches = F)