Transforme solo un eje a escala log10 con ggplot2

Tengo el siguiente problema: me gustaría visualizar una variable discreta y continua en un diagrama de caja en el que este último tiene unos valores extremadamente altos. Esto hace que el diagrama de caja no tenga sentido (los puntos e incluso el "cuerpo" del gráfico son demasiado pequeños), es por eso que me gustaría mostrar esto en una escala log10. Soy consciente de que podría dejar de lado los valores extremos de la visualización, pero no estoy destinado a hacerlo.

Veamos un ejemplo simple con datos de diamantes:

m <- ggplot(diamonds, aes(y = price, x = color))

El problema no es serio aquí, pero espero que puedas imaginar por qué me gustaría ver los valores en una escala log10. Vamos a intentarlo:

m + geom_boxplot() + coord_trans(y = "log10")

Como puede ver, el eje y está escalado log10 y se ve bien, pero hay un problema con el eje x, lo que hace que el gráfico sea muy extraño.

El problema no ocurre conscale_log, peroesta no es una opción para mi, ya que no puedo usar un formateador personalizado de esta manera. P.ej.:

m + geom_boxplot() + scale_y_log10() 

Mi pregunta: ¿alguien sabe una solución para trazar el diagrama de caja con la escala log10 en el eje y cuyas etiquetas podrían formatearse libremente con unformatter funcionar como en estehilo?

Edición de la pregunta para ayudar a los respondedores en función de las respuestas y comentarios:

Lo que realmente busco: un eje log10 transformado (y) con etiquetas no científicas. Me gustaría etiquetarlo como dólar(formatter=dollar) o cualquier formato personalizado.

Si intento la sugerencia de @ hadley, recibo las siguientes advertencias:

> m + geom_boxplot() + scale_y_log10(formatter=dollar)
Warning messages:
1: In max(x) : no non-missing arguments to max; returning -Inf
2: In max(x) : no non-missing arguments to max; returning -Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

Con etiquetas de eje y sin cambios:

Respuestas a la pregunta(4)

Su respuesta a la pregunta