【问题标题】:Increase the resolution between certain values of log x axis in ggplot using R?使用R增加ggplot中log x轴某些值之间的分辨率?
【发布时间】:2020-03-31 20:13:26
【问题描述】:

在 R 中使用 ggplot,我想增加 x 轴上值 1 周围的值之间的距离,即在 0.8 和 1.2 之间。

set.seed(123)
library(ggplot2)

somedatasetx <- append(round(runif(100,0.2,10),2),round(runif(100,0.8,1.2),2))
somedatasety <- round(runif(200,0.2,10),2)
    ggplot(data=NULL, aes(x=somedatasetx, y=somedatasety)) +
    geom_point(color="red") +
    scale_x_log10(
    breaks=c(0.2,1,10),
    limits=c(0.2,11)
    )

我的价值观集中在这些限制附近。简单来说,有没有办法将0.8到1.2之间的距离扩大,以便可视化该区域的值?另一种说法是,我希望上图中从 0.8 到 1.2 的值范围从 0.5 到 5?显然,x 轴上的对数刻度由于此操作而受到影响。

编辑:也许有一种方法可以在 x 轴上结合连续和 log10 比例?比如说,在 0.2 到 1.2 之间连续,并且从那里及以上的 log10?如果我可以控制每个在 x 轴上的比例,那可能就是解决方案。就是不知道有没有可能。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我认为 ggforce 是您的想法。这个怎么样?

    library(ggplot2)
    library(ggforce)
    
    somedatasetx <- append(round(runif(100,0.2,10),2),round(runif(100,0.8,1.2),2))
    somedatasety <- round(runif(200,0.2,10),2)
    to_plot = data.frame( x = somedatasetx, y = somedatasety )
    
    ggplot(data = to_plot, aes(x = x, y = y)) +
      geom_point(color = "red") +
      facet_zoom(xlim = c( 0.8, 1.2 ) )
    

    这样,您的原始绘图位于顶部面板中,而突出显示的区域位于底部面板中。

    【讨论】:

    • 谢谢,但鉴于我将有很多情节,这将使结果更难以解释。我宁愿把它们都放在同一个情节中。我刚刚做了一个编辑,见上文。
    • 我明白了,但不确定这是可行的。 ggplot() 非常精确地处理比例,您想要做的似乎是对内部 x 比例的硬修改。这不仅仅是对轴刻度和文本的简单重新标记,而是物理修改。
    • 这是一个 ggforce 教程:rviews.rstudio.com/2019/09/19/intro-to-ggforce。看看,你可能会找到一种方法来重新缩放到更小的缩放图。我确实认为这是实现您想要的最佳方式。
    【解决方案2】:

    不确定这是不是你想要的??

    somedatasetx <- append(round(runif(100,0.2,10),2),round(runif(100,0.8,1.2),2))
    somedatasety <- round(runif(200,0.2,10),2)
    ggplot(data=NULL, aes(x=somedatasetx, y=somedatasety)) +
      geom_point(color="red") +
      scale_x_log10(
        breaks=c(0.2,1,10),
        limits=c(0.2,11)
      )+ coord_cartesian(xlim=c(0.8,1.2))
    

    【讨论】:

    • (当然你可以根据需要更改 xlim)
    • 抱歉,不是。我宁愿保持对 x 的限制。
    • @pha 对此感到抱歉。在那种情况下,您是否尝试过其他转换?
    • 没问题我感谢所有输入。那么你有什么想法吗?我想不出任何有能力将分辨率扩大到 1 左右。
    • 那么,你基本上想要一个不连续的x轴?如果是这样,这可能很有用:stackoverflow.com/questions/7194688/…。或者更确切地说,它解释了为什么这是不可能/不可取的:)
    猜你喜欢
    • 1970-01-01
    • 2011-11-19
    • 2015-08-20
    • 2015-09-23
    • 2019-11-26
    • 1970-01-01
    • 2017-02-05
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多