2013-04-05 67 views
15

如何使用GNU R創建類似氣泡圖,與系統繪圖研究中使用的類似(請參閱下文)?映射研究的分類氣泡圖

categorical bubble plot used in mapping studies

編輯:好的,這是我到目前爲止已經試過。首先,我的數據集(VAR1去x軸,VAR2去y軸):

> grid 
         Var1      Var2 count 
1    Does.Not.apply   Does.Not.apply 53 
2    Not.specified   Does.Not.apply 15 
3 Active.Learning..general.   Does.Not.apply  1 
4  Problem.based.Learning   Does.Not.apply  2 
5    Project.Method   Does.Not.apply  4 
6   Case.based.Learning   Does.Not.apply 22 
7    Peer.Learning   Does.Not.apply  6 
10      Other   Does.Not.apply  1 
11    Does.Not.apply    Not.specified 15 
12    Not.specified    Not.specified 15 
21    Does.Not.apply Active.Learning..general.  1 
23 Active.Learning..general. Active.Learning..general.  1 
31    Does.Not.apply Problem.based.Learning  2 
34  Problem.based.Learning Problem.based.Learning  2 
41    Does.Not.apply   Project.Method  4 
45    Project.Method   Project.Method  4 
51    Does.Not.apply  Case.based.Learning 22 
56  Case.based.Learning  Case.based.Learning 22 
61    Does.Not.apply    Peer.Learning  6 
67    Peer.Learning    Peer.Learning  6 
91    Does.Not.apply      Other  1 
100      Other      Other  1 

然後,試圖繪製數據:

# Based on http://flowingdata.com/2010/11/23/how-to-make-bubble-charts/ 
grid <- subset(grid, count > 0) 
radius <- sqrt(grid$count/pi) 
symbols(grid$Var1, grid$Var2, radius, inches=0.30, xlab="Research type", ylab="Research area") 
text(grid$Var1, grid$Var2, grid$count, cex=0.5) 

這裏的結果:What I've got

問題:軸標籤錯誤,虛線網格線丟失。

+1

歡迎使用stackoverflow。由於您沒有提供數據集或您嘗試過的任何代碼,因此您會得到一些降薪。看看這個[LINK](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)瞭解如何設置你的問題的更多信息。 – 2013-04-05 18:48:25

+5

對於downvoters我可以理解你爲什麼downvoted,但請花時間向人們解釋爲什麼。 rodrigorgs是第一次海報,並沒有得到SO的規範。如果你冷靜地解釋,那沒有任何用處,只能給我們一個不好的名聲。 – 2013-04-05 18:50:36

+1

嗨@rodrigorgs,迴應泰勒的評論。如果你可以提供一些樣本數據,你更有可能得到有用的答案。 (你可以發佈一個鏈接到數據,或者你可以在你的問題的主體中粘貼一個小樣本。請不要把它放在評論中) – 2013-04-05 19:01:04

回答

11

這裏是ggplot2解決方案。首先,將半徑添加爲數據框的新變量。

grid$radius <- sqrt(grid$count/pi) 

你應該在劇情內部使用大小的點和文本標籤來完美配合。

library(ggplot2) 
ggplot(grid,aes(Var1,Var2))+ 
    geom_point(aes(size=radius*7.5),shape=21,fill="white")+ 
    geom_text(aes(label=count),size=4)+ 
    scale_size_identity()+ 
    theme(panel.grid.major=element_line(linetype=2,color="black"), 
     axis.text.x=element_text(angle=90,hjust=1,vjust=0)) 

enter image description here

+1

+1非常好!如何處理原始圖像中的小陰影:'geom_point(aes(size = radius * 7.8),position = position_dodge(width = .05),shape = 21,fill =「#333333」,color =「 #999999「)+' – 2013-04-05 19:49:12

+0

太好了!我必須學習ggplot2。 – rodrigorgs 2013-04-06 00:59:16

1

這會讓你開始在你的xax中添加刻度標記。

要爲子加線,只需在每個級別

ggs <- subset(gg, count > 0) 
radius <- sqrt(ggs$count/pi) 

# ggs$Var1 <- as.character(ggs$Var1) 

# set up your tick marks 
# (this can all be put into a single line in `axis`, but it's placed separate here to be more readable) 
#-------------- 
# at which values to place the x tick marks 
x_at <- seq_along(levels(gg$Var1)) 
# the string to place at each tick mark 
x_labels <- levels(gg$Var1) 


# use xaxt="n" to supress the standard axis ticks 
symbols(ggs$Var1, ggs$Var2, radius, inches=0.30, xlab="Research type", ylab="Research area", xaxt="n") 
axis(side=1, at=x_at, labels=x_labels) 

text(ggs$Var1, ggs$Var2, ggs$count, cex=0.5) 

另外注意,而不是調用對象grid我把它叫做gg添加一行,然後ggsgridR中的一項功能。雖然「允許」用對象覆蓋函數,但不建議這樣做,並且可能導致煩人的錯誤。

2

這裏使用levelplotlatticeExtra版本。

library(latticeExtra) 
levelplot(count~Var1*Var2,data=dat, 
      panel=function(x,y,z,...) 
      { 
      panel.abline(h=x,v=y,lty=2) 
      cex <- scale(z)*3 
      panel.levelplot.points(x,y,z,...,cex=5) 
      panel.text(x,y,label=z,cex=0.8) 
      },scales=(x=list(abbreviate=TRUE))) ## to get short labels 

enter image description here

爲了讓泡沫proprtional的大小來計,你可以做到這一點

library(latticeExtra) 
levelplot(count~Var1*Var2,data=dat, 
      panel=function(x,y,z,...) 
      { 
      panel.abline(h=x,v=y,lty=2) 
      cex <- scale(z)*3 
      panel.levelplot.points(x,y,z,...,cex=5) 
      panel.text(x,y,label=z,cex=0.8) 

      }) 

我不顯示它,因爲渲染是不明確的,如修復大小寫。