При построении графика гистограмм, диаграмм рассеяния и других графиков с осями, масштабированными до логарифмической шкалы в R, как можно использовать метки, такие как 10 ^ -1 10 ^ 0 10 ^ 1 10 ^ 2 10 ^ 3 и т.д. вместо оси, показывающие только -1, 0, 1, 2, 3 и т.д. Какие параметры должны быть добавлены к командам, таким как hist(), plot() и т.д.
Отображение логарифмической шкалы в R
Ответ 1
Помимо решения ggplot2 (см. комментарий gsk3), я хотел бы добавить, что это происходит автоматически в plot(), а также при использовании правильных аргументов, например:
x <- 1:10
y <- exp(1:10)
plot(x,y,log="y")
Вы можете использовать параметр log="x" для оси X или log="xy" для обоих.
Если вы хотите отформатировать номера или у вас есть данные в формате журнала, вы можете сделать обходной путь, используя ось(). Некоторые интересные функции:
-
axTicks(x)дает вам местоположение тиков по оси X (x = 1) или по оси Y (x = 2) -
bquote()преобразует выражения в язык, но может заменить переменную своим значением. Дополнительная информация оbquote()в вопросе Латекс и переменные в метке графика в R?. -
as.expression()делает объект языка, исходящий из выраженияbquote(). Это позволяетaxis()выполнять форматирование, как описано в?plotmath. Он не может сделать это с языковыми объектами.
Пример хорошего форматирования:
x <- y <- 1:10
plot(x,y,yaxt="n")
aty <- axTicks(2)
labels <- sapply(aty,function(i)
as.expression(bquote(10^ .(i)))
)
axis(2,at=aty,labels=labels)
Что дает

Ответ 2
Вот другой способ рисования этого типа оси:
plot(NA, xlim=c(0,10), ylim=c(1, 10^4), xlab="x", ylab="y", log="y", yaxt="n")
at.y <- outer(1:9, 10^(0:4))
lab.y <- ifelse(log10(at.y) %% 1 == 0, at.y, NA)
axis(2, at=at.y, labels=lab.y, las=1)
EDIT: Это также решается в latticeExtra с scale.components
Ответ 3
В ggplot2 вы можете добавить
... +
scale_x_log10() +
scale_y_log10(limits = c(1e-4,1), breaks=c(1e-4,1e-3,1e-2,0.1,1)) + ...
для масштабирования вашей оси, отметьте их и добавьте пользовательские перерывы.
