在没有使用比例变换的情况下指定ggplot2中刻度标签的格式?

时间:2013-04-03 19:10:17

标签: r ggplot2 rpy2

我在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=参数,我怎样才能正确格式化刻度?

2 个答案:

答案 0 :(得分:2)

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

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

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

enter image description here

(显然这没有意义,因为权重不是已经在基数2范围内,但这个概念有效。)

答案 1 :(得分:1)

猜测math_format()位于scales(现在无法检查),根据Brian的回答,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()