R左连接并显示平均飞机延误机场

时间:2017-08-13 11:50:14

标签: r ggplot2 dplyr

我正在研究Hadley Wickams的书" R 4 Data Science",第13章。它要求计算和可视化美国各个机场的平均航班延误。

设置的初始操作:

library(tidyverse)
library(nycflights13)

这使得5个表可用flightsplanesairportsairlinesweather。 我计算每个目的地的平均延迟(省略NA值,是吗?):

flights2 <- flights %>% group_by(dest) %>%
                        summarise(avg=mean(dep_delay, na.rm=T)) %>%
                        left_join(airports, c("dest"="faa"))
flights2 %>%
            ggplot(aes(lon, lat)) + geom_point(aes(size=avg)) + 
                                    borders("states") +
                                    coord_quickmap()

我的平均值是否正确? 地图中的所有圆圈都不那么大,我怎样才能使它们更好地区分?

1 个答案:

答案 0 :(得分:1)

您的问题更像是如何使用ggplot2使分数更明显。我相信我们可以使用trans_new包中的scales函数来定义转换,并将该转换应用于大小范围。

library(tidyverse)
library(nycflights13)
library(scales)

# The same analysis yu did
flights2 <- flights %>% group_by(dest) %>%
  summarise(avg=mean(dep_delay, na.rm=T)) %>%
  left_join(airports, c("dest"="faa"))

# Use trans_new function from the scale package to define the square transformation
sq_trans <- function(){
  trans_new(name = "sq", 
            transform = function(x) x^2, 
            inverse = function(x) sqrt(x))
  }

# Plot the data 
flights2 %>%
  ggplot(aes(lon, lat)) + 
  # Use alpha to make overlaid points apparent
  geom_point(aes(size = avg), colour = "red", alpha = 0.5) +
  # Apply the sq transformation
  scale_size(range = c(1, 6), trans = "sq")

注意

请注意,您可以在range = c(...)中测试不同的数字而不进行任何转换,但我没有找到合适的值,所以我只使用了默认值。在trans参数中,我们可以选择许多其他转换,例如loglog10sqrt ...(有关详细信息,请参阅?scale_size )。再一次,我没有找到一个好的转换,所以我决定定义平方变换,即size = avg ^ 2。请参阅?trans_new了解如何定义新转化。

最后,因为有很多点叠加在一起,我们可以使用alpha = ...指定点的透明度,使每个点更清晰。

更新

要显示更多尺寸类,我们可以在breaks中设置scale_size来指定断点。

# Plot the data 
flights2 %>%
  ggplot(aes(lon, lat)) + 
  # Use alpha to make overlaid points apparent
  geom_point(aes(size = avg), colour = "red", alpha = 0.5) +
  # Set break points in 5, 10, 20, 30; Apply the sq transformation
  scale_size(breaks = c(5, 10, 20, 30), trans = "sq")