在R中绘制名义数据的集群

Pas*_*ten -1 r

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

总结一下:

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

  • 没有顺序的分组,在画布周围传播

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

  • 将群体中的个体绑定到某个(不可见的)圆圈会很好

有没有为此目的设计的包装?我需要寻找什么关键词?

示例数据:

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

Vin*_*ynd 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=""
)
Run Code Online (Sandbox Code Playgroud)

wordcloud

或者,您可以为每个组构建一​​个包含clique(或树)的图形,并使用其中一个图形布局算法igraph.

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

IGRAPH