-1

想象一下,我们有 7 个类别(例如宗教),我们希望不以线性方式绘制它们,而是以自动选择的簇的形式很好地对齐。在这里,组内的个人具有相同的响应,但不应将其绘制在一条线上(在绘制序数数据时会发生这种情况)。

所以总结一下:

  • 自动使用可用的图空间

  • 无序分组,散布在画布周围

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

  • 让团体中的个人被一些(不可见的)圈子束缚会很好

是否有为此目的设计的软件包?我需要寻找哪些关键字?

示例数据:

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

2 回答 2

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=""
)

词云

或者,您可以为每个组构建一​​个带有集团(或树)的图形,并使用igraph.

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

图形

于 2013-06-29T13:54:10.047 回答
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如果想走这条路,您将不得不使用参数并手动设置中心。

于 2013-06-29T13:18:22.287 回答