簡體   English   中英

在R中標繪名義數據簇

[英]Plotting clusters of nominal data in 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)  

將坐標分配給每個組的中心后,可以使用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))

圖

在您鏈接的圖像中,每個點都有三個關聯的數字: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並且如果要沿用此路徑,則可能需要手動設置中心。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM