0

我正在尝试使用 ggplot 在 Rpy2 的对数刻度上格式化我的轴。在普通的 R 中,可以这样做:

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

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

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

4

2 回答 2

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()
于 2013-02-17T19:12:06.867 回答
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()
于 2013-02-17T18:42:23.753 回答