R ggplot2: пользовательские метки деления оси Y для данных, преобразованных в журнал? - PullRequest
0 голосов
/ 28 мая 2020

Большинство руководств, которые я видел, по преобразованию данных на основе журнала, включают использование шкалы оси Y или оси X на основе журнала. Если бы я хотел построить график значений моих данных на основе журнала 10 и указать их относительные фактические реальные значения на основе экспоненты:

library(ggplot2)
library(scales)

a <- c(5,10,15,20)
b <- c(100,210,350,750)
d <- log10(b)

test_df <- data.frame(xval = a,yval = d)
test_plt <- ggplot(data = test_df,aes(x = xval,y = yval)) +
  geom_point() + 
  scale_y_continuous(breaks = seq(1,3,by = 1),limits = c(1,3),labels = trans_format("log10", 
math_format(10^.x)))

print(test_plt)

На основе кода я получаю следующие результаты :

Log10-based plot

Очевидно, R пытается преобразовать уже преобразованные в журнал 10 значения в журнал 10 снова на основе значений, есть ли способ указать, что я хочу, чтобы мои значения тика по оси Y были 10 1 , 10 2 , 10 3 и т. д. c. (ie: значения на графике преобразованы в журнал 10 , но отметки по оси Y показывают фактические значения перед преобразованием в журнал 10 ? Или я подхожу к этой проблеме неправильно?

1 Ответ

1 голос
/ 28 мая 2020

Вы можете просто использовать math_format() со своими аргументами по умолчанию:

test_plt <- ggplot(data = test_df,aes(x = xval,y = yval)) +
    geom_point() + 
    scale_y_continuous(breaks = seq(1,3,by = 1),
                       limits = c(1,3),
                       labels = math_format())

print(test_plt)

enter image description here

From help("math_format"):

Usage
... [Some content omitted]...

math_format(expr = 10^.x, format = force)

Это именно форматирование, которое вы хотите, 10^.x, а не 10^.x после преобразования a log10, которое вы получаете, когда называете его в пределах trans_format("log10", math_format(10^.x))

...