Существует ли элегантный способ работы с осями и единицами, преобразованными в лог, из пакета единиц в R? - PullRequest
1 голос
/ 14 апреля 2020

Пакет юнитов очень полезен для работы с юнитами. Тем не менее, мне не ясно, как строить переменные с единицами на лог-преобразованных осях. На базовом графике добавление параметра log="y" приводит к ошибке. То же самое касается ggplot2, использующего стандартную функцию scale_y_log10(). Кроме того, использование функции ggforce scale_y_unit(trans="log10") работает, но создает криптографическую метку оси c. - Есть ли способ сделать эту работу на базовом участке? - Есть ли способ, чтобы scale_y_unit(trans="log10") не связывался с меткой оси и вместо этого сосредотачивался на числах на осях и данных?

library(units)

# Take cars data frame: stopping dist (ft) vs speed (mph)
plot(cars)

# Using base plot
Distance = set_units(cars$dist, ft)
Speed = set_units(cars$speed, mph)
plot(x=Speed, y=Distance, log="y") 
# Error in Ops.units(y, 0) : 
#  both operands of the expression should be "units" objects

# Using ggplot
library(ggplot2)
library(ggforce)
df = cars
df$Disance = set_units(df$dist, ft)
df$Speed = set_units(df$speed, mph)

qplot(x=Speed, y=Distance, data=df) +
  scale_y_unit(trans="log10")
# Y-axis is cryptically labelled with "Distance (lg(re 0.3048 m))"

1 Ответ

3 голосов
/ 14 апреля 2020

Вместо применения преобразования журнала в масштабе вы можете применить его через coord_trans. (Кстати: добавляет метки тиканья к графику) Попробуйте:

library(units)
library(ggplot2)
library(ggforce)
df = cars
df$Distance = set_units(df$dist, ft)
df$Speed = set_units(df$speed, mph)

qplot(x=Speed, y=Distance, data=df) +
  scale_y_unit() +
  coord_trans(y = "log10")

Создано в 2020-04-14 пакетом Представлять (v0.3.0)

...