这是一种自定义转换和标注功能的方法.它应该适用于任意数据.
library(ggplot2)
label_log2 <- function(x) parse(text = paste0('2^', log(x, 2)))
ggplot(mtcars, aes(mpg, cyl)) +
geom_point() +
scale_x_continuous(
trans = 'log2',
labels = label_log2)
Run Code Online (Sandbox Code Playgroud)
根据alistaire的评论,我们还可以使用scales包提供的功能格式化轴标签:
library(scales)
ggplot(mtcars, aes(mpg, cyl)) +
geom_point() +
scale_x_continuous(
trans = 'log2',
labels = trans_format('log2', math_format(2^.x)))
Run Code Online (Sandbox Code Playgroud)
这里,trans_format将在指定的转换后格式化标签.
根据手册:
trans
要么是转换对象的名称,要么是对象本身.内置转换包括"asn","atanh","boxcox","exp","identity","log","log10","log1p","log2","logit","probability"," probit","reciprocal","reverse"和"sqrt".转换对象将变换捆绑在一起,它是反向的,以及用于生成中断和标签的方法.转换对象在scale包中定义,称为name_trans,例如boxcox_trans.您可以使用trans_new创建自己的转换.
trans应该是一个转换对象(比如调用的返回值scales::log2_trans)或内置转换的名称,所以我们也可以使用trans = scales::log2_trans()而不是trans = 'log2'.