#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"))
Комментарии:
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")
Из перекрытий вы можете видеть, что каждая последующая строка отображается поверх предыдущих значений.
Таким образом, при построении отдельных подмножеств все, что вы нанесете первым (все серые точки), будет внизу, и так далее, а точки, которые вы нанесете последними (синие), сверху. Когда вы наносите все сразу, они будут нанесены в том порядке, в каком они отображаются в ваших данных.