[英]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.