Transforme apenas um eixo na escala log10 com ggplot2

Eu tenho o seguinte problema: eu gostaria de visualizar uma variável discreta e contínua em um boxplot no qual este último tenha alguns valores extremamente altos. Isso torna o boxplot sem sentido (os pontos e até o "corpo" do gráfico são muito pequenos), é por isso que eu gostaria de mostrar isso em uma escala log10. Estou ciente de que poderia deixar de fora os valores extremos da visualização, mas não pretendo.

Vamos ver um exemplo simples com dados de diamantes:

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

O problema não é sério aqui, mas espero que você possa imaginar por que gostaria de ver os valores em uma escala log10. Vamos tentar:

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

Como você pode ver, o eixo y é redimensionado em log10 e parece ótimo, mas há um problema com o eixo x, o que torna o gráfico muito estranho.

O problema não ocorre comscale_log, masisso não é uma opção para mim, pois não posso usar um formatador personalizado dessa maneira. Por exemplo.:

m + geom_boxplot() + scale_y_log10() 

Minha pergunta: alguém conhece uma solução para plotar o boxplot com a escala log10 no eixo y, cujos rótulos podem ser livremente formatados com umformatter funcionar como nestefio?

Editando a pergunta para ajudar os respondentes com base em respostas e comentários:

O que realmente estou procurando: um eixo log10 transformado (y) sem rótulos científicos. Eu gostaria de rotulá-lo como dólar(formatter=dollar) ou qualquer formato personalizado.

Se eu tentar a sugestão de @ hadley, recebo os seguintes avisos:

> 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

Com rótulos de eixo y inalterados:

questionAnswers(4)

yourAnswerToTheQuestion