¿Cómo puedo agregar un degradado de color vertical a una gráfica de cresta en ggridges?

8

El paquete ggridges le permite dibujar diagramas de cresta con cualquier color sólido:

ggplot(iris, aes(x=Sepal.Width, y=Species))+
geom_density_ridges(alpha=0.33, scale=2, fill="#0570b0", colour=alpha(0.1))+
theme_classic()

o con gradientes de color horizontales :

ggplot(iris, aes(x=Sepal.Width, y=Species, fill=..x..))+
geom_density_ridges_gradient(scale=2,colour=alpha(0.1))+
theme_classic()+
scale_fill_gradient(low="#0570b0", high="White")

Pero quiero saber si es posible producir un gráfico similar con un gradiente de color vertical , como este ejemplo (que se dibujó usando D3.js). ¿Hay alguna manera de implementar algo similar en R?

Gráfico de gradiente vertical en D3.js desde el ONS

Fuente de imagen ONS: generación de mediana edad con mayor probabilidad de morir por suicidio y envenenamiento

VictimOfMaths
fuente
Dudo que sea posible. El desarrollador afirma que solo está disponible a lo largo del eje x, y el código parece que usa los valores x para calcular los pasos a lo largo del gradiente: github.com/clauswilke/ggridges/blob/master/R/geoms-gradient.R
Dan Slone

Respuestas:

4

Podemos hacer esto usando los paquetes devoutsvg y svgpatternsimple relacionados :

# install packages    
# devtools::install_github("coolbutuseless/lofi")      
# devtools::install_github("coolbutuseless/minisvg")   
# devtools::install_github("coolbutuseless/devout")    
# devtools::install_github("coolbutuseless/devoutsvg") 
# devtools::install_github("coolbutuseless/poissoned") 

library(lofi)
library(minisvg)
library(devout)
library(devoutsvg)
library(svgpatternsimple)
library(poissoned)

#create gradient
grad <- create_gradient_pattern(id="p1", angle=90, colour1="White", 
colour2="#0570b0")

#visualise it
grad$show()

#encode it
gradRGB <- encode_pattern_params_as_hex_colour(pattern_name="gradient",angle=90, 
colour1="White", colour2="#0570b0")   

#draw graph
svgout(filename = "test.svg", pattern_pkg="svgpatternsimple")
ggplot(iris, aes(x=Sepal.Width, y=Species))+
  geom_density_ridges(alpha=0.33, scale=2, 
fill=gradRGB, colour=alpha(0.1))+
  theme_classic()
invisible(dev.off())    

Esto le proporciona un archivo .svg con un degradado vertical como el siguiente: diagrama de relleno de gradiente vertical.

ingrese la descripción de la imagen aquí


Actualización: la función ahora está en GitHub: VictimOfMaths / DeathsOfDespair .

VictimOfMaths
fuente