【问题标题】:How to show higher values in ggplot2 within facet_grid如何在 facet_grid 中的 ggplot2 中显示更高的值
【发布时间】:2017-08-01 07:21:01
【问题描述】:

我刚刚在ggplot2中找到了facet_grid函数,太棒了。问题是:我有一个包含 6 个国家(HC 列)和全球航班目的地的列表。我的数据如下所示:

           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"))

生成此图: 我想避免在 y 轴上过度绘制。提前谢谢!!!

【问题讨论】:

    标签: ggplot2 facet-grid


    【解决方案1】:

    您可以创建一个变量来按国家/地区指示每个目的地的排名,然后在 ggplot 调用中选择排名

    ggplot(data = mydata[rank <= 10, ], ....)
    

    PS:目前您使用管道在一行中创建数据和绘制数据。我会将数据创建和绘图步骤分开。

    【讨论】:

      【解决方案2】:

      由于您没有以正确的格式发布您的数据(查看dput()),我只使用了一个示例数据。使用 dplyr 包我在这种情况下按 grp 变量(group_by(grp),在您的情况下是 country)并选择按 x 变量排序的前 10 行(...top_n(n = 10,...)( wt = x,在您的情况下,它将是 freq)并进一步绘制(只是在这种情况下为散点图):

      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()
      

      【讨论】:

      • 感谢您的回答!我的问题是,每个国家(HC 列)都有自己的“前 10 名目的地”。有没有一种简单的方法可以将函数 top_n 与 faces_grid 集成?
      • 我不太明白你的意思,HC 列是自己的 Top 10 目的地是什么意思?它在你的表格中显示在哪里?你想显示什么样的 10 Top 目的地?
      • 我的意思是,HC 是旅行的始发国,Destination 是目的地国家。因此,每个“原籍国”都有自己的“前 10 名目的地”。但是你的回答给了我一个很好的起点!!谢谢!
      • 这就是为什么在我发布的代码中你有一个group_by,它将根据国家/地区对你的数据进行分组,然后分别为每个目的地选择前 10 个目的地
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多