es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer un número fijo de interrupciones en la leyenda de ggplot2 al graficar múltiples gráficos.

Supongamos que tengo una lista df de 20 data.frames y necesito graficarlos en un for loop utilizando scale_fill_steps2, de la siguiente manera:

plot_lst=list()

for (i in 1:length(df)) {

    plot_lst[[i]] = ggplot() +
    geom_contour_fill(data=df[[i]], aes(x=lon, y=lat, z=value)) +
    scale_fill_steps2(name = "", low = "#0571b0", mid = '#ffffbf', high = '#ca0020')

}

Cada uno de mis data.frames tiene un rango diferente de value y crear una leyenda personalizada para cada uno de ellos no es práctico. ¿Existe alguna forma de graficar mis data.frames con un número único de divisiones en la leyenda? Por ejemplo, 5 o 6 divisiones en total.

Gracias por cualquier ayuda.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes utilizar los argumentos limits y breaks de la función scale_fill_steps2() para establecer un rango común y un conjunto común de cortes para todos los gráficos.

    Primero, debes determinar los valores mínimo y máximo de value en todos los data.frames utilizando la función range():

    range_value <- range(unlist(lapply(df, function(x) x$value)))
    

    Luego, puedes establecer los límites y cortes utilizando scale_fill_steps2():

    common_breaks <- 5 # o 6, u cualquier otro número de cortes que desees
    ggplot() +
      geom_contour_fill(data=df[[i]], aes(x=lon, y=lat, z =value)) +
      scale_fill_steps2(name = "", 
                        limits = range_value, 
                        breaks = seq(range_value[1], range_value[2], length.out = common_breaks), 
                        low = "#0571b0", 
                        mid = "#ffffbf", 
                        high = "#ca0020")
    

    Aquí, limits se establece como range_value para asegurarse de que todos los gráficos tengan el mismo rango de value. breaks se establece utilizando seq() para crear una secuencia de cortes espaciados de manera uniforme entre los valores mínimo y máximo de value. length.out se utiliza para controlar el número de cortes, que se establece como common_breaks.

    Al establecer un rango común y un conjunto común de cortes para todos los gráficos, obtendrás una leyenda con el mismo número de cortes en cada gráfico.

Comments are closed.