2014-03-05 43 views
0

我想用ggplot2來可視化我的數據框。我的數據框中的每一行代表一個具有三種價值觀的人:人的角色,人的村莊和該村莊從共同起源的距離。我想爲每個村莊想象角色(比如方塊圖),但我也希望村莊按照距離(從最近到最遠)按字母順序繪製。所有我現在的問題是:如何boxplot因素和排序因素與qqplot2連續變量之一

qplot(h[,2],h[,1], xlab="village", ylab="role") 

我不知道如何告訴qplot(),使箱線圖,以及如何根據距離訂購村莊。我也想顯示一個頂部x軸的距離。任何幫助超過歡迎!

我的數據幀是這樣的:

h<-structure(list(role = structure(c(4L, 4L, 4L, 4L, 6L, 6L, 4L, 
4L, 4L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 2L, 
3L, 1L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 1L, 1L, 2L, 2L, 
2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 3L, 4L, 4L, 4L, 4L, 3L, 5L, 5L, 5L, 5L, 5L, 3L, 3L, 
3L, 4L, 4L, 4L, 4L, 4L, 3L, 3L, 4L, 4L, 3L, 3L, 3L, 3L, 6L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 5L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 6L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 3L, 3L, 6L), .Label = c("1", "2", "3", "4", "5", 
"6"), class = "factor"), village = structure(c(9L, 9L, 9L, 9L, 
15L, 15L, 15L, 15L, 15L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 13L, 13L, 13L, 13L, 13L, 13L, 11L, 11L, 11L, 
11L, 11L, 11L, 11L, 11L, 11L, 11L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 12L, 
12L, 12L, 12L, 12L, 10L, 10L, 10L, 10L, 10L, 10L, 14L, 14L, 14L, 
14L, 14L, 2L, 7L, 7L, 7L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 
16L, 4L, 4L, 4L, 4L, 4L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 3L, 3L, 3L), .Label = c("a", 
"b", "c", "d", "e", "f", "g", 
"h", "i", "l", "m", "n", "o", 
"p", "q", "r"), class = "factor"), distance = c(409, 
409, 409, 409, 365, 365, 365, 365, 365, 351, 351, 351, 351, 351, 
351, 351, 351, 351, 351, 351, 351, 351, 436, 436, 436, 436, 436, 
436, 439, 439, 439, 439, 439, 439, 439, 439, 439, 439, 434, 434, 
434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 
434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 434, 
434, 434, 434, 434, 434, 434, 434, 434, 466, 466, 466, 466, 466, 
466, 492, 492, 492, 492, 492, 447, 448, 448, 448, 431, 431, 431, 
431, 431, 431, 431, 431, 449, 449, 449, 449, 449, 471, 471, 471, 
471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, 443, 
443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 
443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 
443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 443, 
416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 
416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 
416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 
416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 416, 
416, 416, 416, 416, 416, 416, 416, 416, 416, 423, 423, 423)), .Names = c("role", 
"village", "distance"), row.names = c(NA, -221L), class = "data.frame") 

回答

1
library(plyr) 
txt <- ddply(h, .(village), summarize, role = max(as.numeric(role)), distance = distance[1]) 
ggplot(h, aes(x = reorder(village, distance, max), y = role)) + geom_boxplot(aes(group = village)) + geom_text(data = txt, aes(village, role, label = distance), vjust = -1) 

所以基本上你有geom_text添加文本。

+0

超級棒!順便說一句,最好在頂部添加一個列出距離的x軸,這是可能的嗎?軸(3 ...)不適用於ggplot2 – user299791