ticks scale_x_discrete ggtitle ggplot change r ggplot2

scale_x_discrete - ¿Hay una forma incorporada de hacer una escala de color logarítmica en ggplot2?



ggtitle (2)

Aquí hay un ejemplo de un diagrama de densidad binned:

require(ggplot2) n <- 1e5 df <- data.frame(x = rexp(n), y = rexp(n)) p <- ggplot(df, aes(x = x, y = y)) + stat_binhex() print(p)

Sería bueno ajustar la escala de colores para que los descansos estén espaciados por el registro, pero intente

my_breaks <- round_any(exp(seq(log(10), log(5000), length = 5)), 10) p + scale_fill_hue(breaks = as.factor(my_breaks), labels = as.character(my_breaks))

Resultados en un Error: Continuous variable () supplied to discrete scale_hue. Parece que los breaks esperan un factor (¿quizás?) Y están diseñados con variables categóricas en mente?

Hay una scale_fill_hue no integrada que publicaré como respuesta, pero creo que podría estar perdido en mi uso de scale_fill_hue , y me gustaría saber si hay algo obvio que me estoy perdiendo.


¡Sí! Hay un argumento trans para scale_fill_gradient , que me había perdido antes. Con eso podemos obtener una solución con leyenda y escala de color apropiadas, y una sintaxis concisa agradable. Usando p de la pregunta y my_breaks = c(2, 10, 50, 250, 1250, 6000) :

p + scale_fill_gradient(name = "count", trans = "log", breaks = my_breaks, labels = my_breaks)

Mi otra respuesta se usa mejor para funciones más complicadas de los datos. El comentario de Hadley me animó a encontrar esta respuesta en los ejemplos en la parte inferior de ?scale_gradient .


Otra forma, usando una función personalizada en stat_summary_hex :

ggplot(cbind(df, z = 1), aes(x = x, y = y, z = z)) + stat_summary_hex(function(z){log(sum(z))})

Esto ahora es parte de ggplot , pero originalmente se inspiró en el maravilloso código de @kohske en esta respuesta , que proporcionaba un stat_aggrhex personalizado. En las versiones de ggplot> 2.0, use el código anterior (o la otra respuesta)

ggplot(cbind(df, z = 1), aes(x = x, y = y, z = z)) + stat_aggrhex(fun = function(z) log(sum(z))) + labs(fill = "Log counts")

Para generar esta trama