Улучшение читаемости графика - PullRequest
1 голос
/ 07 марта 2020

Мне нужно искать корреляции в общедоступном пакете рейсов. Мне удалось сделать точечный график, используя ggplot. enter image description here С кодом:

library(nycflights13)
attach(flights)
ggplot(flights, aes(x = arr_delay, y = dep_delay)) + 
  geom_point(size = 2) +
  geom_smooth(method="auto", se=TRUE, fullrange=FALSE, level=0.95)

Как показано на рисунке, большая часть находится в центре слева внизу. Есть ли способ сделать этот график более привлекательным за счет лучшего распределения отображаемых значений?

Ответы [ 3 ]

3 голосов
/ 07 марта 2020

Я использовал грани для разделения рейсов, которые прибыли рано или вовремя (arr_delay <= 0), и рейсов, которые прибыли поздно (arr_delay> 0). Отношения кажутся разными.

library(nycflights13)
library(dplyr)
library(ggplot2)

ff <- flights %>%
  filter(!is.na(arr_delay), origin=="LGA") %>%  # Filtered to reduce waiting time!
  mutate(`Arrival time`=ifelse(arr_delay<=0, "Early", "Delayed"))

ggplot(ff, aes(x = arr_delay, y = dep_delay)) + 
       geom_point(size = 2, alpha = 0.3) +
       geom_smooth(method="auto", fullrange=FALSE, level=0.95) + 
       facet_wrap(~`Arrival time`, scales="free", labeller=label_both) +
       labs(x="Arrival delay (minutes)", y="Departure delay (minutes)")

enter image description here

3 голосов
/ 07 марта 2020

Вы можете построить свои точки, используя параметр alpha, который дает им степень прозрачности (от 0 до 1, наиболее непрозрачная) для них. Это улучшит перекрывающиеся точки guish, а также сделает участки графика с более высокой концентрацией более темными. Стиль сюжета также улучшится.

Начните со значения alpha = 0.7, затем экспериментируйте с ним, пока не получите наилучшие результаты.

ggplot(flights, aes(x = arr_delay, y = dep_delay)) + 
  geom_point(size = 2, alpha = 0.7) +
  geom_smooth(method="auto", se=TRUE, fullrange=FALSE, level=0.95)
1 голос
/ 07 марта 2020

Для точек можно использовать агрегированные данные, для сглаживания нормальных данных.

flights <- within(flights, {
  bin <- floor(dep_delay / 10)
  av_arr <- ave(arr_delay, bin, FUN=mean)
  av_dep <- ave(dep_delay, bin, FUN=mean)
})

library("ggplot2")
library("nycflights13")
ggplot(flights) + 
  geom_point(aes(x=av_arr, y=av_dep), size=2) +
  geom_smooth(aes(x=arr_delay, y=dep_delay), method="auto", se=TRUE, 
              fullrange=FALSE, level=0.95)

enter image description here

...