2017-08-01 41 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

我的意思是,慧聪是旅行的始发国,目的地是目的地国家。所以每个“原产国”都有自己的“十大目的地”。不过,你的回答给了我一个很好的起点!谢谢! –

相关问题