是否有一种优雅的方法来处理 R 中单位包中的对数转换轴和单位?

Is there an elegant way to deal with log-transformed axes and units from the units package in R?

单位包对于处理单位非常有用。但是,我不清楚如何在对数转换轴上绘制带有单位的变量。在基本图中,添加 log="y" 参数会导致错误。使用标准 scale_y_log10() 函数的 ggplot2 也是如此。或者,使用 ggforce 函数 scale_y_unit(trans="log10") 可以工作,但会产生一个神秘的轴标签。 - 有没有办法在基本情节中进行这项工作? - 有没有办法避免 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))"

您可以通过 coord_trans 应用它,而不是在 scale 内应用对数转换。 (顺便说一句:为情节添加刻度标签)试试这个:

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")

reprex package (v0.3.0)

于 2020-04-14 创建