【问题标题】:Using log axes scales in ggplot from Rpy2在 Rpy2 的 ggplot 中使用对数轴缩放
【发布时间】:2013-02-02 04:17:39
【问题描述】:

我正在尝试使用 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, ...) 无需再次记录数据?只是重新格式化标签,因为数据已经在日志值中。谢谢。

【问题讨论】:

    标签: python r ggplot2 rpy2


    【解决方案1】:

    由于这是一个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()
    

    【讨论】:

    • ggplot2 包装在rpy2.robjects.lib.ggplot2 中的行为非常少。其中之一是为 ggplot 构造绘图,该方法称为plot(),而不是print()(感觉不那么混乱)。
    • 感谢您的解释! rpy2的好东西!我有一个问题(抱歉在这里问),rpy2 是否用于实际的业务应用程序中?
    • 我不会举出例子,因为害怕开始违背我的意愿就什么是“真正的生意”进行辩论;-),但从我收集的信息来看。在相当广泛的领域。
    • @lgautier: 但ggplot2.scale_x_continuous(trans = scales.log2_trans()) 并没有真正将日志应用于数据?我的数据已经记录了。所以想象iris 已经在日志值中,我只希望轴跟随。我不想通过绘图来转换我的数据;数据已经转换并以日志形式保存在数据框中。
    • @user248237 :如果您的数据已经被记录,那么不要应用转换并且您已经设置好了。如果您希望刻度线和标签遵循对数转换,则必须 1)从非对数转换数据开始 2)使用 coord_trans(x="log2") 而不是 scale_x_continuous(trans = scales.log2_trans())
    【解决方案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()
    

    【讨论】:

    • +1 用于展示如何使用单线体功能添加比例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    相关资源
    最近更新 更多