Может ли кто-нибудь объяснить разницу между ggplot и geom_point?

#r #ggplot2

#r #ggplot2

Вопрос:

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

построение каждого набора цветов отдельно

 g1 <- ggplot(df)   
  geom_point(data = df[df$color==1, ],
             mapping = aes(x=A, y=B), col = "grey", alpha = 0.05,)   
  geom_point(data = df[df$color==2, ],
             mapping = aes(x=A, y=B), col = "red", alpha = 0.05)   
  geom_point(data = df[df$color==3, ],
             mapping = aes(x=A, y=B), col = "blue", alpha = 0.05)
  

введите описание изображения здесь

совмещение точек

 g2 <- ggplot(df,
             mapping = aes(x = A, y = B, colour = color))   
  geom_point(alpha = 0.05)   
  scale_colour_manual(values = c("grey", "red", "blue"))
  

g2

Комментарии:

1. Я предполагаю, что порядок построения отличается. Если вы измените порядок df по цвету, они будут совпадать. Все прорисовывается по одной геометрии за раз, поэтому синие точки прорисовываются последней на верхней. В geom порядок данных.фрейм имеет значение, я думаю, что верхние строки рисуются первыми.

2. Когда вы добавляете слои, каждый из них располагается поверх предыдущего. Итак, первый способ: сначала вы наносите все серые точки, затем поверх них наносите все красные точки, затем вы наносите все синие точки на самом верху. Я не уверен на 100%, но я думаю, что когда у вас есть один слой, они отображаются в порядке строк.

Ответ №1:

Подтверждаю то, что было сказано в комментариях. Один слой будет нанесен в порядке строк. Вот демонстрация

 dd = data.frame(
  x = c(1:4, 4:1) / 4,
  y = rep(c(1, 1.25), each = 4),
  group = rep(letters[1:4], 2),
  id = 1:8
)

dd
#      x    y group id
# 1 0.25 1.00     a  1
# 2 0.50 1.00     b  2
# 3 0.75 1.00     c  3
# 4 1.00 1.00     d  4
# 5 1.00 1.25     a  5
# 6 0.75 1.25     b  6
# 7 0.50 1.25     c  7
# 8 0.25 1.25     d  8

library(ggplot2)
ggplot(dd, aes(x, y, color = group))  
  geom_point(size = 60, show.legend = FALSE)  
  coord_fixed()  
  geom_text(aes(label = id), color = "black")
  

введите описание изображения здесь

Из перекрытий вы можете видеть, что каждая последующая строка отображается поверх предыдущих значений.

Таким образом, при построении отдельных подмножеств все, что вы нанесете первым (все серые точки), будет внизу, и так далее, а точки, которые вы нанесете последними (синие), сверху. Когда вы наносите все сразу, они будут нанесены в том порядке, в каком они отображаются в ваших данных.