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