是否有一种优雅的方法来处理 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 创建
单位包对于处理单位非常有用。但是,我不清楚如何在对数转换轴上绘制带有单位的变量。在基本图中,添加 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 创建