Tengo un gráfico de velocidades del viento contra la dirección que tiene una gran cantidad de puntos, por lo que estoy usando alpha = I (1/20) además de color = month
Aquí hay una muestra de código:
library(RMySQL)
library(ggplot2)
con <- dbConnect(...)
wind <- dbGetQuery(con, "SELECT speed_w/speed_e AS ratio, dir_58 as dir, MONTHNAME(timestamp) AS month, ROUND((speed_w+speed_e)/2) AS speed FROM tablename;");
png("ratio-by-speed.png",height=400,width=1200)
qplot(wind$dir,wind$ratio,ylim=c(0.5,1.5),xlim=c(0,360),color=wind$month,alpha=I(1/30),main="West/East against direction")
dev.off()
Esto produce un gráfico decente, sin embargo, mi problema es que el alfa de la leyenda también es 1/30, lo que lo hace ilegible. ¿Hay alguna manera de forzar que la leyenda sea 1 alfa?
Aquí hay un ejemplo:
guides()
función en varias posiciones pero no obtengo el comportamiento esperado. ¿Alguna pista?colour
según lo que esté usando para configurar los colores. Por ejemplo, usé la solución anterior conguides(fill = guide_legend(...))
ya que uséaes(fill = val)
para mi tramaUn poco de búsqueda en Google apareció en esta publicación, lo que no parece indicar que ggplot actualmente admita esta opción. Otros han abordado problemas relacionados utilizando gridExtra y viewPorts como se explica aquí .
No soy tan sofisticado, pero aquí hay un enfoque que debería brindarle los resultados deseados. El enfoque es trazar la geom dos veces, una vez sin un parámetro alfa y fuera del área de trazado real. La segunda geom incluirá el parámetro alfa y suprimirá la leyenda. Luego especificaremos la región de trazado con xlim e ylim. Dado que tiene muchos puntos, esto duplicará aproximadamente el tiempo de trazado, pero debería darle el efecto que busca.
Usando el conjunto de datos de diamantes:
#Alpha parameter washes out legend ggplot(data = diamonds, aes(depth, price, colour = clarity)) + geom_point(alpha = 1/10) #Fully colored legend ggplot() + geom_point(data = diamonds, aes(depth, price, colour =clarity), alpha = 1/10, legend = FALSE) + geom_point(data = diamonds, aes(x = depth - 999999, y = price - 999999, colour = clarity)) + xlim(40, 80) + ylim(0, 20000)
fuente