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

Ggplot2 перемещает ось x вверх (пересекаются с обратной осью y в точке 0)

Я хочу сделать фигуру с обратной осью y и осью x при y = 0. ось y была отменена с помощью scale_y_reverse, но ось x осталась внизу.

p <- ggplot(df, aes(x= conc, y=depth, group=factor(stn), color=factor(stn)))+
geom_point(shape=1)+
geom_path(alpha=0.5)+
scale_y_reverse(limits=(c(20,0)), expand=c(0,0))+   
scale_x_continuous(expand=c(0,0))

Я пробовал код из этого сообщения, как показано ниже, но не работал.

p + 
scale_x_continuous(guide = guide_axis(position = "top")) + 
scale_y_continuous(guide = guide_axis(position = "right"))

Мне не нужно иметь две оси x, просто переместите снизу вверх.

4b9b3361

Ответ 1

Это все еще невозможно в ggplot2, но это возможно в ggvis, который объединяет грамматик ggplot2 с конвейерами dplyr. Просто используйте функцию add_axis, чтобы поместить ось вверху.

# sample data
N <- 20
df <- data.frame(conc = seq(0, N), 
                 depth = runif(N+1, 0, 20), 
                 stn = rep(1:4, length=N+1))
# ggplot version
require(ggplot2)
p <- ggplot(df, aes(x= conc, y=depth, group=factor(stn), color=factor(stn)))+
  geom_point(shape=1)+
  geom_path(alpha=0.5)+
  scale_y_reverse(limits=(c(20,0)), expand=c(0,0))+   
  scale_x_continuous(expand=c(0,0))
p
# ggvis version
require(ggvis)
df %>% transform(stn = factor(stn)) %>%
  ggvis(x = ~conc, y = ~depth, stroke = ~stn) %>%
  layer_points(shape := "circle", fill := "white") %>%
  layer_lines(opacity := 0.5) %>%
  scale_numeric("y", reverse=TRUE, domain=c(0,20), expand=c(0,0)) %>%
  scale_numeric("x", expand=c(0,0)) %>%
  add_axis("x", orient = "top") 

Ответ 2

Вы также можете использовать:

library(cowplot)
ggdraw(switch_axis_position(p, axis = 'x'))