Estoy haciendo un gráfico con un eje y secundario que es solo una escala multiplicativa del eje primario para mostrarlo en unidades alternativas.

Mi eje y principal tiene una escala logarítmica, con marcas de registro de annotation_logticks. ¿Hay alguna forma de obtener marcas de registro en el eje y secundario en las unidades escaladas? Actualmente están en las unidades primarias.

library(tidyverse)

x=c(100,1000000,100,1000000)
y=c(0.01,0.01,0.32,0.32)
z=c(1,1,0.5,0.5)
data <- data.frame(x,y,z)

data %>%
  ggplot(aes(x = x, y = y, z = z, fill = z)) +
  geom_raster(interpolate=TRUE) + 
  coord_fixed(ratio = 1, xlim = c(100,1000000), ylim=c(0.01,0.32)) +
  annotation_logticks(sides = "trbl") + 
  scale_x_log10() +
  scale_y_log10(sec.axis = sec_axis(~ . / 0.0714,
                                    breaks=c(0.2,0.5,1,2,5),
                                    name = "Sec. Axis")) + 
  scale_fill_continuous() +
  theme_bw()

Creado el 24-08-2020 por el paquete reprex (v0.3.0)

Fotos adicionales:

Actualmente, el eje derecho se ve así: marcas de registro incorrectas del eje derecho

Me gustaría que el eje se viera así: marcas correctas del registro del eje derecho

3
masher 24 ago. 2020 a las 12:20

1 respuesta

La mejor respuesta

No parece haber una manera de hacer esto directamente con annotation_logticks, ya que el único parámetro posicional que puede cambiar es base. Sin embargo, cambiar la base no afecta la posición del punto de interrupción principal, que está determinada por los valores del eje primario.

Sin embargo, puede lograr un efecto similar configurando manualmente los cortes y las etiquetas en el eje secundario:

data %>%
  ggplot(aes(x = x, y = y, z = z, fill = z)) +
  geom_raster(interpolate=TRUE) + 
  coord_fixed(ratio = 1, xlim = c(100,1000000), ylim=c(0.01,0.32)) +
  annotation_logticks(sides = "tbl") + 
  scale_x_log10() +
  scale_y_log10(sec.axis = sec_axis(~ . * 14,
                                    breaks= c(seq(0.1, 1, 0.1), 2:5),
                                    labels =  replace(character(14), 
                                                      c(2, 5, 10, 11, 14), 
                                                      c(0.2, 0.5, 1, 2, 5)),
                                    name = "Sec. Axis")) + 
  scale_fill_continuous() +
  theme_bw() 

enter image description here

1
Allan Cameron 24 ago. 2020 a las 13:39