2013-06-29 50 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

謝謝,但我必須承認文森特的答案看起來更專業:-) –