2013-06-29 45 views
-1

想象一下,我们有7个类别(例如宗教信仰),我们希望不是以线性方式绘制它们,而是在自动选择很好对齐的集群中进行绘制。这里组内的个体具有相同的响应,但不应该绘制在一行上(当绘制序数据时发生这种情况)。在R中绘制标称数据的集群

所以总结起来:

  • 自动使用可用的图形空间

  • 没有顺序分组,帆布周围蔓延

  • 个人依然可见;没有重叠

  • 将是不错的组内的个人通过一些(不可见的)圆

绑定是否有为此而设计的任何包?我需要寻找哪些关键字?

实施例的数据:

religion <- sample(1:7, 100, T) 
# No overlap here, but I would like to see the group part come out more. 
plot(religion) 
+0

目前尚不清楚你想要达到的目的。我以为我知道,但示例数据混淆了我。请把例子图表。 – TMS

+0

@Tomas像这样,没有线之间我猜想http://eclectic.ss.uci.edu/~drwhite/LocalPopulations/522-districts.gif – PascalVKooten

+0

只是没有数据和解释链接图是不够的! – TMS

回答

6

将坐标分配给每个组的中心后,可以使用wordcloud::textplot来避免重叠标签。

# Data 
n <- 100 
k <- 7 
religion <- sample(1:k, n, TRUE) 
names(religion) <- outer(LETTERS, LETTERS, paste0)[1:n] 
# Position of the groups 
x <- runif(k) 
y <- runif(k) 
# Plot 
library(wordcloud) 
textplot(
    x[religion], y[religion], names(religion), 
    xlim=c(0,1), ylim=c(0,1), axes=FALSE, xlab="", ylab="" 
) 

wordcloud

或者,也可以建立与一个集团(或树)的曲线图 对于每个组, 并使用igraph的许多图形布局算法之一。

library(igraph) 
A <- outer(religion, religion, `==`) 
g <- graph.adjacency(A) 
plot(g) 
plot(minimum.spanning.tree(g)) 

igraph

+0

非常感谢,这是非常有帮助的。 – PascalVKooten

1

在您连接各点的图像具有相关联的三个数字:坐标x和y和组(颜色)。如果你只需要为每个单独的一个信息,你可以做这样的事情:

set.seed(1) 

centers <- data.frame(religion=1:7, cx=runif(7), cy=runif(7)) 

eps <- 0.04 

data <- within(merge(data.frame(religion=sample(1:7, 100, T)), centers), 
{ 
    x <- cx+rnorm(length(cx),sd=eps) 
    y <- cy+rnorm(length(cy),sd=eps) 
}) 

with(data, plot(x,y,col=religion, pch=16)) 

注意,我创建的每个组随机中心还创建围绕这些中心为每个观测小位移。你必须玩弄参数eps,并可能设置中心手动如果要追求这条道路。

+0

对于产生随机图的一个答案如何得到4个更多的upvotes比产生随机图的另一个答案(并且不会加载一堆外部代码来做)。 +1来补偿。 –

+0

谢谢,但我必须承认文森特的答案看起来更专业:-) –