2014-10-26 74 views
3

我想創建一個散點圖,其中每個點都是一個小餅圖。例如考慮以下數據:使用ggplot2來表示散點圖中每個點的小餅圖

foo <- data.frame(X=runif(30), Y=runif(30),A=runif(30),B=runif(30),C=runif(30)) 

下面的代碼將散點圖,表示每個點的XY值:

library(reshape2) 
library(ggplot2) 
foo.m <- melt(foo, id.vars=c("X","Y")) 
ggplot(foo.m, aes(X,Y))+geom_point() 

enter image description here

以下代碼將使每個點的餅圖:

p <- ggplot(foo.m, aes(variable,value,fill=variable)) + geom_bar(stat="identity") 
p + coord_polar() + facet_wrap(~X+Y,,ncol=6) + theme_bw() 

enter image description here

但我正在尋找合併它們:創建一個散點圖,其中每個點被替換爲餅圖。這樣我就可以在同一個圖表中顯示每條記錄的所有5個值(X,Y,A,B,C)。

有沒有辦法做到這一點?

+4

天哪。我希望不是。 – hrbrmstr 2014-10-26 21:31:44

+0

@hrbrmstr爲什麼?我抽取了一些觀點,X和Y來自主成分分析(PCA)。 A,B和C是每個記錄的屬性(實際上他們是6,而不是3)。你有更好的想法在PCA陰謀中顯示它們嗎? – Ali 2014-10-26 21:47:23

+0

條形圖>餅圖。總是。 – hrbrmstr 2014-10-27 01:00:06

回答

7

這是你可以用包ggsubplot做的事情。不幸的是,根據問題#10 here,這個軟件包不適用於R 3.1.1。如果我使用舊版本的R(3.0.3),我成功地運行了它。

使用你的長期數據集,你可以把巴圖在每個XY點是這樣的:

library(ggplot2) 
library(ggsubplot) 

ggplot(foo.m) + 
    geom_subplot2d(aes(x = X, y = Y, 
        subplot = geom_bar(aes(variable, value, fill = variable), stat = "identity")), 
       width = rel(.5), ref = NULL) 

enter image description here

這使基本的想法,雖然還有許多其他選項(如控制當情節空間中存在重疊時,子情節向哪裏移動)。

This answer有更新的R版本的ggsubplot的更多信息。

+0

謝謝。我有R 3.1.1,正如你所說的那樣會導致錯誤。你能否在答案中添加你的情節的快照? – Ali 2014-11-26 03:09:13

+1

@Ali我用一個例子更新了答案。 – aosmith 2014-11-26 16:10:49