在Rpy2中使用ggplot的对数坐标轴

0 投票
2 回答
1366 浏览
提问于 2025-04-17 16:11

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

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

这样就能得到一个log2的坐标轴。当我在Rpy2中尝试使用ggplot2.scale_y_log2时,它却提示找不到这个功能,虽然ggplot2.scale_x_log10(对数以10为底)可以正常使用。我该如何在Rpy2中获得log2的坐标轴呢?

还有一个相关的问题:如果我的数据已经是对数形式的(比如在一个Pandas数据框中,我对行应用了log2),我该如何让Rpy2中的ggplot只将坐标轴格式化为对数坐标轴(也就是说,刻度像2^1, 2^2, 2^4, ...),而不需要再次对数据进行对数处理?只需要重新格式化标签,因为数据已经是对数值了。谢谢。

2 个回答

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()
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()

撰写回答