2017-08-01 42 views
0

我剛剛在ggplot2中找到了函數facet_grid,這很棒。問題是:我有6個國家(列HC)的列表和世界各地的航班目的地。我的數據是這樣的:如何在facet_grid中在ggplot2中顯示更高的值

  HC Reason Destination freq  Perc 
     <chr> <chr>  <chr> <int>  <dbl> 
1 Germany Study  Germany  9 0.3651116 
2 Germany Work  Germany  3 0.1488095 
3 Germany Others  Germany  3 0.4901961 
4 Hungary Study  Germany 105 21.4285714 
5 Hungary Work  Germany 118 17.6382661 
6 Hungary Others  Germany 24 5.0955414 
7 Luxembourg Study  Germany 362 31.5056571 

有沒有一種方法,在每個國家只顯示前十大目的地和使用功能facet_grid?我試着做散點圖這樣:

Geograp %>% 
    gather(key=Destination, value=freq, -Reason, -Qcountry) %>% 
    rename(HC = Qcountry) %>% 
    group_by(HC,Reason) %>% 
    mutate(Perc=freq*100/sum(freq)) %>% 
    ggplot(aes(x=Perc, y=reorder(Destination,Perc))) + 
    geom_point(size=3) + 
    theme_bw() + 
    facet_grid(HC~Reason) + 
    theme(panel.grid.major.x = element_blank(), 
     panel.grid.minor.x = element_blank(), 
     panel.grid.major.y = element_line(colour = "grey60", linetype = "dashed")) 

將會產生此圖:enter image description here我想避免在y軸的overplotting。提前致謝!!!

回答

1

您可以創建一個變量,表示每個目的地按國家,然後在ggplot呼叫選擇行的排名與排名< = 10,如注意:目前,您使用管道在一行中創建數據和繪圖數據。我會分開數據創建和繪圖步驟。

0

由於您尚未以正確的格式發佈您的數據(請查看dput()),我僅使用了一個示例數據。使用dplyr包我在此情況下,通過GRP可變分組(group_by(grp),在你的情況下,它是一個國家)和選定的前10行,其通過變量x(wt = x排序(...top_n(n = 10,...),在你的情況下,將頻率 ),只是在這種情況下散點圖)進一步(繪製它:

library(dplyr) 
set.seed(123) 
d <- data.frame(x = runif(90),grp = gl(3, 30)) 

d %>% 
group_by(grp) %>% 
top_n(n = 10, wt = x) %>% 
ggplot(aes(x=x, y=grp)) + geom_point() 
+0

感謝您的回答!我的問題是在每個國家(HC列)都有自己的「十大目的地」。有沒有簡單的方法來將函數top_n與faces_grid集成? –

+0

我不是很明白你的意思,那麼這個專欄所代表的是什麼意思,它是自己的十大目的地?它在哪裏顯示在你的桌子上?什麼樣的10個最熱門的目的地你想表演? –

+0

我的意思是,慧聰是旅行的始發國,目的地是目的地國家。所以每個「原產國」都有自己的「十大目的地」。不過,你的回答給了我一個很好的起點!謝謝! –

相關問題