Часто может потребоваться преобразовать шкалу оси X или оси Y графика ggplot2 в логарифмическую шкалу.
Вы можете использовать один из следующих двух методов, используя только ggplot2:
1. Используйте scale_y_continuous() или scale_x_continuous()
ggplot(df, aes (x=x, y=y)) +
geom_point() +
scale_y_continuous(trans='log10') +
scale_x_continuous(trans='log10')
2. Используйте coord_trans()
ggplot(df, aes (x=x, y=y)) +
geom_point() +
coord_trans(y ='log10 ' , x='log10')
Если вы хотите отформатировать метки осей для отображения показателей, вы можете использовать функции из пакета Scales :
ggplot(df, aes (x=x, y=y)) +
geom_point() +
scale_y_continuous(trans='log10',
breaks= trans_breaks('log10', function (x) 10^x),
labels= trans_format('log10', math_format (10^.x)))
В этом руководстве показаны примеры использования этих функций на практике.
Пример 1: логарифмическая шкала с использованием scale_y_continuous()
В следующем коде показано, как использовать функцию scale_y_continuous() для создания логарифмической шкалы для оси Y диаграммы рассеяния:
library (ggplot2)
#create data frame
df <- data.frame(x=c(2, 5, 6, 7, 9, 13, 14, 16, 18),
y=c(1400, 1700, 2300, 2500, 2800, 2900, 3400, 3900, 11000))
#create scatterplot with log scale on y-axis
ggplot(df, aes (x=x, y=y)) +
geom_point() +
scale_y_continuous(trans='log10')
Пример 2: Логарифмическая шкала с использованием coord_trans()
В следующем коде показано, как использовать функцию coord_trans() для создания логарифмической шкалы для оси Y диаграммы рассеяния:
library (ggplot2)
#create data frame
df <- data.frame(x=c(2, 5, 6, 7, 9, 13, 14, 16, 18),
y=c(1400, 1700, 2300, 2500, 2800, 2900, 3400, 3900, 11000))
#create scatterplot with log scale on y-axis
ggplot(df, aes (x=x, y=y)) +
geom_point() +
coord_trans(y='log10')
Пример 3: Пользовательские метки шкалы журнала
В следующем коде показано, как использовать функции из функции пакета Scales для создания логарифмической шкалы для оси Y диаграммы рассеяния и добавления пользовательских меток с показателями:
library (ggplot2)
library (scales)
#create data frame
df <- data.frame(x=c(2, 5, 6, 7, 9, 13, 14, 16, 18),
y=c(1400, 1700, 2300, 2500, 2800, 2900, 3400, 3900, 11000))
#create scatterplot with log scale on y-axis and custom labels
ggplot(df, aes (x=x, y=y)) +
geom_point() +
scale_y_continuous(trans='log10',
breaks= trans_breaks('log10', function (x) 10^x),
labels= trans_format('log10', math_format (10^.x)))
Обратите внимание, что метки оси Y имеют показатели степени, в отличие от двух предыдущих графиков.
Дополнительные ресурсы
Полное руководство по заголовкам ggplot2
Полное руководство по лучшим темам ggplot2
Как создавать параллельные графики в ggplot2