Подтвердить что ты не робот

Удалите лишнее пространство за пределы xlim и ylim

Я хотел бы сделать график плотности так, чтобы оси были рядом с (или, по крайней мере, очень близкими) метками. Как видно из этого MWE, ggplot2 зарезервировано некоторое пространство между отметками меток и осями как по оси x, так и по оси y, даже если я указал xlim и ylim. Как их удалить?

С другими видами сюжетов кажется, что вы можете назвать что-то вроде scale_y_continuous(limits=c(0, 100), expand = c(0, 0)) (например), но вызов scale_linetype_manual() с этими параметрами не похоже, что-то делают.

Также обратите внимание, что в примечании здесь я рисую оси с помощью geom_segment. Есть ли лучший способ сделать это?

set.seed(0)
the.df <- data.frame( x = rnorm(800, 50, 10), group = rep(letters[1:8], each = 100))

p <- ggplot(the.df) + 
    stat_density(aes(x = x, linetype = group), geom = "line", position = "identity") +
    xlim(10, 90) + ylim(0, 0.06) +
    scale_linetype_manual(values = c("11", "12", "13", "14", "21", "22", "23", "24")) +
    geom_segment(aes(x = 10, y = 0, xend = 90, yend = 0)) +
    geom_segment(aes(x = 10, y = 0, xend = 10, yend = 0.06))

p
4b9b3361

Ответ 1

Выключает scale_x_continuous() и scale_x_continuous. Я просто не использовал их правильно раньше.

set.seed(0)
the.df <- data.frame( x = rnorm(800, 50, 10), group = rep(letters[1:8], each = 100))

p <- ggplot(the.df) + 
    stat_density(aes(x = x, linetype = group), geom = "line", position = "identity") +
    scale_linetype_manual(values = c("11", "12", "13", "14", "21", "22", "23", "24")) +
    scale_x_continuous(limits=c(10, 90), expand = c(0, 0)) +
    scale_y_continuous(limits=c(0, 0.06), expand = c(0, 0)) +
    geom_segment(aes(x = 10, y = 0, xend = 90, yend = 0)) +
    geom_segment(aes(x = 10, y = 0, xend = 10, yend = 0.06))

p

Ответ 2

Другой вариант с использованием coord_cartesian вместо непрерывных шкал положения (x и y):

set.seed(0)
the.df <- data.frame( x = rnorm(800, 50, 10), group = rep(letters[1:8], each = 100))
p <- ggplot(the.df) + 
  stat_density(aes(x = x, linetype = group), geom = "line", position = "identity") +
  scale_linetype_manual(values = c("11", "12", "13", "14", "21", "22", "23", "24")) +
  geom_segment(aes(x = 10, y = 0, xend = 90, yend = 0)) +
  geom_segment(aes(x = 10, y = 0, xend = 10, yend = 0.06))+
  coord_cartesian(xlim = c(10, 90), ylim = c(0, .06))
p

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