Gráfico de barras de ggplot: cómo mostrar números positivos pequeños con el eje y escalado de registro

Problema principal: quiero mostrar los datos de 0 a 1.0 como una barra hacia arriba (a partir de 0) pero no quiero que los intervalos estén igualmente espaciados sino espaciados logarítmicamente.

Estoy tratando de mostrar la columna etiquetada como "media" en el conjunto de datos a continuación como un gráfico de barras en ggplot, pero como los números son muy pequeños, me gustaría mostrar el eje y en una escala logarítmica en lugar de transformar los datos en sí. En otras palabras, quiero tener barras verticales con etiquetas de eje y como 0, 1e-8, 1e-6 1e-4 1e-2 y 1e-0 (es decir, de 0 a 1.0 pero los intervalos están escalados).

La solución a continuación no funciona ya que las barras están invertidas.

> print(df)
        type         mean           sd           se snp
V7    outer 1.596946e-07 2.967432e-06 1.009740e-08   A
V8    outer 7.472417e-07 6.598652e-06 2.245349e-08   B
V9    outer 1.352327e-07 2.515771e-06 8.560512e-09   C
V10   outer 2.307726e-07 3.235821e-06 1.101065e-08   D
V11   outer 4.598375e-06 1.653457e-05 5.626284e-08   E
V12   outer 5.963164e-07 5.372226e-06 1.828028e-08   F
V71  middle 2.035414e-07 3.246161e-06 1.104584e-08   A
V81  middle 9.000131e-07 7.261463e-06 2.470886e-08   B
V91  middle 1.647716e-07 2.875840e-06 9.785733e-09   C
V101 middle 3.290817e-07 3.886779e-06 1.322569e-08   D
V111 middle 6.371170e-06 1.986268e-05 6.758752e-08   E
V121 middle 8.312429e-07 6.329386e-06 2.153725e-08   F

El siguiente código genera correctamente el diagrama de barras agrupado con barras de error

ggplot(data=df, aes(x=snp,y=mean,fill=type))+
  geom_bar(stat="identity",position=position_dodge(),width=0.5) + 
  geom_errorbar(aes(ymin=mean-se, ymax=mean+se),width=.3, position=position_dodge(.45)) 

Sin embargo, quiero escalar el registro del eje y, así que agrego scale_y_log10 () de la siguiente manera:

 ggplot(data=df, aes(x=snp,y=mean,fill=type))+
  geom_bar(stat="identity",position=position_dodge(),width=0.5) + scale_y_log10() +
  geom_errorbar(aes(ymin=mean-se, ymax=mean+se),width=.3, position=position_dodge(.45)) 

Pero, extrañamente, las barras se están cayendo desde arriba, pero simplemente quiero que suban (como normalmente) y no sé qué estoy haciendo mal.

Gracias

Respuestas a la pregunta(1)

Su respuesta a la pregunta