使用log轴在Rpy2的ggplot中进行缩放

时间:2013-02-17 18:16:09

标签: python r ggplot2 rpy2

我正在尝试使用ggplot在Rpy2的日志范围内格式化我的轴。在普通的R中,可以这样做:

qplot(data=data, x=x, y=y) + geom_point() + scale_y_log2()

获取log2轴。当我尝试在Rpy2中使用ggplot2.scale_y_log2时,它会抱怨它找不到,虽然ggplot2.scale_x_log10(log * 10 *)工作正常。如何在Rpy2中获取log2轴?

相关问题:如果我的数据已被记录(例如,它是在我将log2应用于行的Pandas数据框中),我怎样才能在Rpy2中获取ggplot以将轴格式化为日志轴(即刻度为2 ^ 1,2 ^ 2,2 ^ 4,...)没有再次记录数据?只需重新格式化标签,因为数据已经是日志值。感谢。

2 个答案:

答案 0 :(得分:3)

由于这是一个Python / rpy2问题,Python中的代码:

from rpy2.robjects.lib import ggplot2
from rpy2.robjects import r
from rpy2.robjects.packages import importr

scales = importr('scales')

iris = r('iris')

p = ggplot2.ggplot(iris) + \
    ggplot2.geom_point(ggplot2.aes_string(x="Sepal.Length", y="Sepal.Width")) + \
    ggplot2.scale_x_continuous(trans = scales.log2_trans())

p.plot()

答案 1 :(得分:2)

要回答问题的第一部分,您不能在R中执行此操作:

qplot(data=data, x=x, y=y) + geom_point() + scale_y_log2()

你收到这个错误:

   Error: could not find function "scale_y_log2"

所以,你必须在之前定义它:

library(scales)
scale_y_log2 <- function (...) 
{
  scale_y_continuous(..., trans = log2_trans())
}
dat <- data.frame(x=1:10,y=1:10)
qplot(data=dat, x=x, y=y) + geom_point() + scale_y_log2()