Estoy intentando ajustar la posición de las marcas de garrapatas en mi parcela para que caigan a lo largo del eje en lugar de en el perímetro de la parcela (que es el valor predeterminado). He intentado usar el argumento axis.ticks dentro de ggplot2 y esto no funcionó. Aquí hay algunos datos de datos y el código necesario para producir el gráfico con el que estoy trabajando:

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
                  v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))
p = ggplot()
p + geom_point(aes(dat$v1, dat$v2) ,shape = 21, size = 3) + 
  geom_vline(xintercept = 0, linetype = "dashed") +
  geom_hline(yintercept = 0, linetype = "dashed") +
  theme_bw()

Asesorar en cualquier paquete, funciones o argumentos que puedan usarse para mover las marcas de garrapatas a los ejes en lugar de los bordes exteriores del área de gráficos.

3
Nathan_P_Wilson 28 jun. 2019 a las 01:27

1 respuesta

La mejor respuesta

Retener juntos el comentario de User20650 enlazando a Mover X o Y ejes junto con etiquetas de garrapatas a la mitad de un solo ggplot (sin facetas), que comparte @ Baptiste y < un href = "https://stackoverflow.com/questions/39071002/moving-x-or-y-axis-together-with-tick-labels-to-the-middle-of-a-single-ggglot-n/ 43364343 # 43364343 "> @ User73708 Funciones de . Quité sus líneas discontinuas y moví los datos y AES a la llamada GGPLOT.

library(ggplot2)
dat <- data.frame(v1 = c(1, 3, -2, 2, 1, 4, -2, 2),
                  v2 = c(-1, 2, 1, -3, 4, 1, -1, 2))

shift_axis_y <- function(p, y=0){
  g <- ggplotGrob(p)
  dummy <- data.frame(y=y)
  ax <- g[["grobs"]][g$layout$name == "axis-b"][[1]]
  p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(y=1, height=sum(ax$height))), 
                        ymax=y, ymin=y) +
    geom_hline(aes(yintercept=y), data = dummy) +
    theme(axis.text.x = element_blank(), 
          axis.ticks.x=element_blank())
}

shift_axis_x <- function(p, x=0){
      g <- ggplotGrob(p)
      dummy <- data.frame(x=x)
      ax <- g[["grobs"]][g$layout$name == "axis-l"][[1]]
      p + annotation_custom(grid::grobTree(ax, vp = grid::viewport(x=1, width = sum(ax$height))), 
                            xmax=x, xmin=x) +
        geom_vline(aes(xintercept=x), data = dummy) +
        theme(axis.text.y = element_blank(), 
              axis.ticks.y=element_blank())
    }

p <- ggplot(dat, aes(v1, v2)) + 
  geom_point(shape = 21, size = 3) + 
  theme_bw()

p<-shift_axis_y(p, y=0)
p<-shift_axis_x(p, x=0)
p
1
M.Viking 28 jun. 2019 a las 02:00