#r #ggplot2 #aes
#r #ggplot2 #aes
Вопрос:
Я пытаюсь создать 32 вертикальных отрезка, используя столбец mpg фрейма данных mtcars. Все хорошо, когда я запускаю следующий код:
a <- ggplot (mtcars)
b <- geom_segment (x = 1:32, y = 0, aes (xend = 1:32, yend = mpg))
a b
Однако, когда я определяю аргумент xend вне функции aes(), это выглядит следующим образом.
a <- ggplot (mtcars)
b <- geom_segment (x = 1:32, y = 0, xend = 1:32, aes (yend = mpg))
a b
Мой вопрос в том, почему это не работает? Почему я могу определить x и y вне функции aes(), но не xend? Что означает новая диаграмма?
Ответ №1:
Итак, вкратце, цель aes()
функции — связать эстетику с масштабами, чтобы их можно было отобразить. Это также причина colour = "blue"
, по которой внешний цвет будет синим aes()
, но будет отображен в дискретную цветовую шкалу, если вы поместите его внутрь aes()
.
Масштабы, помимо прочего, измеряют пределы диапазона данных. Если вы определяете оба x
и xend
вне aes()
и, следовательно, они не связаны напрямую со шкалой, измерение, которое будут выполнять шкалы, не увидит этих значений.
В приведенном ниже примере вы можете видеть, что использование этой стратегии дает вам масштаб x, который имеет ограничения по умолчанию, вместо ограничений, которые вы бы измеряли по данным.
library(ggplot2)
a <- ggplot (mtcars)
b <- geom_segment (x = 1:32, y = 0, xend = 1:32, aes (yend = mpg))
g <- a b
sc <- layer_scales(g)
(sc$x$get_limits())
#> [1] 0 1
Создано 2020-12-10 пакетом reprex (версия 0.3.0)
Если вы поиграете еще немного, вы увидите, что вы можете определить geom_segment (aes(x = 1:32, yend =mpg), y = 0, xend = 1:32)
, что не привязывает масштаб xend
к масштабу, но в любом случае будет отображаться правильно из-за того, что масштаб видит x
отображение.