Как создать логарифмическую шкалу в ggplot2


Часто может потребоваться преобразовать шкалу оси 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