1

我在 ggplot2 中有一个图表(通过 rpy2),它以 log2 比例格式化 x 轴:

p += ggplot2.scale_x_continuous(trans=scales.log2_trans(),
                                   breaks=scales.trans_breaks("log2",
                                                              robj.r('function(x) 2^x'),
                                                              n=8),
                                   labels=scales.trans_format("log2", robj.r('math_format(2^.x)')))

如果 x 值已经在 log2 中,我该如何应用 , 的格式转换scales以使值以2^x格式显示,而不是十进制 log2 值?即,如果我要放弃trans=参数,我怎样才能正确格式化刻度?

4

2 回答 2

2

我可以用纯 R 给出答案,但我不知道 rpy2 能够翻译它。

实际上,您只需指定labels控制标签显示方式的参数;不要更改影响整体缩放和中断出现位置的transor参数。breaks使用mtcars为例:

library("ggplot2")
library("scales")
ggplot(mtcars, aes(wt, mpg)) + 
  geom_point() +
  scale_x_continuous(labels = math_format(2^.x))

在此处输入图像描述

(显然这没有意义,因为重量还不是以对数为底的 2 刻度,但这个概念有效。)

于 2013-04-03T23:40:35.493 回答
1

猜测math_format()scales(现在无法检查),并且根据布赖恩的回答,rpy2 版本应该如下:

from rpy2.robjects.lib import ggplot2
from rpy2.robjects.packages import importr
scales = importr("scales")
p = ggplot2.ggplot(mtcars) + \
        ggplot2.aes_string(x="wt", y="mpg")) + \ 
        ggplot2.geom_point() + \
        ggplot2.scale_x_continuous(labels = scales.math_format("2^.x"))
p.plot()
于 2013-04-04T10:57:25.577 回答