我在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=
参数,我怎样才能正确格式化刻度?
答案 0 :(得分:2)
我可以用纯R给出答案,但我不知道rpy2能够翻译它。
实际上,您只需指定控制标签显示方式的labels
参数;不要更改影响整体缩放和出现中断的trans
或breaks
参数。以mtcars
为例:
library("ggplot2")
library("scales")
ggplot(mtcars, aes(wt, mpg)) +
geom_point() +
scale_x_continuous(labels = math_format(2^.x))
(显然这没有意义,因为权重不是已经在基数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()