Как я могу математически преобразовать метки по умолчанию в легенде в ggplot?

У меня есть 2D-график поверхности, сделанный с помощью ggplot, который я раскрашиваю, чтобы показать значение его третьего измерения. Эти данные широко варьируются в направлении Z, поэтому я преобразовал их в логарифмическое преобразование, прежде чем выполнять интерполяцию для построения графика.

Мне нравятся варианты по умолчанию, выбранные алгоритмом построения для разрывов. Однако метки для этих разрывов теперь являются значениями журнала.

Текущий код окраски:

scale_fill_viridis(breaks = waiver(), labels = waiver())

waiver() — это флаг базового алгоритма для использования значений по умолчанию. В идеале я хотел бы сделать что-то вроде

scale_fill_viridis(breaks = waiver(), labels = sprintf("%.1f", 10^waiver()))

но это ломается с ошибкой Error in 10^my_breaks : non-numeric argument to binary operator

Как я могу математически преобразовать значения по умолчанию для меток в значения, которыми они были бы до преобразования журнала?


person masher    schedule 03.04.2020    source источник


Ответы (1)


Как насчет такого:

your_function <- function(x){sprintf("%.1f", 10^as.numeric(x))}

labels = scales::trans_format("identity", your_function)

your_function возьмет обратное log10, эффективно отменив преобразование журнала. scales::trans_format переформатирует данную метку, применив переданную ей функцию, в данном случае your_function.

Конечно, вы можете определить функцию переформатирования внутри trans_format, но для того, чтобы все было как можно понятнее, я сделал это в два этапа.

person Greg    schedule 03.04.2020