如何格式化2 ^ x格式的x轴刻度标签?

7 r ggplot2

当x是log2-scale时,如何以2 ^ x格式修改x轴标签?

当它出现在图表上时,x应该最好是上标.

mt1*_*022 8

这是一种自定义转换和标注功能的方法.它应该适用于任意数据.

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'.

  • `scales`也提供格式化函数.在这种情况下,它不是预先编写的那个,但是用可用的函数构造并不困难:`labels = scales :: trans_format('log2',scales :: math_format(2 ^ .x))` (2认同)