在Rpy2中使用ggplot的对数坐标轴
我正在尝试在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()