【问题标题】:overlapping y-scales in facet (scale="free")平面中的重叠 y 尺度(scale="free")
【发布时间】:2023-04-08 05:31:01
【问题描述】:

过去几周我一直在学习 ggplot。一般来说,我正在完成事情(虽然很慢),但现在我被卡住了。我创建了以下多面图:http://dl.dropbox.com/u/7752237/example_bad_y_scales.pdf

刻面由

完成
pl <- pl + facet_wrap(~sci_name,ncol=1,scale="free")

问题:y 尺度上的数字看起来不太好,尤其是从 0 到 70 的尺度(数字重叠)。 我想以某种方式改变 y 尺度上的休息次数(比如说只有 1 或 2 次休息)。有没有人可能知道如何做到这一点?任何帮助将不胜感激。 :)

PS:我没有包含一个最小的示例,因为我认为解决该特定问题没有多大帮助。

在 Kohskes 回答后编辑:

嗨,科斯克, 哇,这是一个非常快速的答案,谢谢!但是,我认为它不适用于多面图。看看

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
p <- p + facet_wrap(~gear,ncol=1,scale="free")

在 y 尺度上,它在中间的图中给出了 3 个中断,在下图中给出了 8 个中断……不是很一致(但至少不像我的示例那样重叠)。

p2 <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25))

也不是很好:下部地块上有两个主要刻度,中间和上部地块只有一个。 当秤的差异比 mtcars 更大时,结果会更不令人满意。还有其他想法吗? ;)

在 Kohskes 编辑后编辑:

您好,我不知道如何实现。在 google 上搜索 ggplot 和 input_break 只得到 10 个结果,没有一个有帮助。 我试过了

p <- ggplot(mtcars, aes(wt, mpg))
p <- p + geom_point()
p <- p + facet_wrap(~gear,ncol=1,scale="free")
p$input_breaks<-function(., range) {
    pretty(range, n=3)
}
print(p)

但是,我在图表中看不到任何效果(尝试了 n=1、3、15)。您能否描述如何在 mtcars 示例中实现这一点?谢谢!

【问题讨论】:

    标签: r ggplot2 facet facet-wrap


    【解决方案1】:

    p

    dev.new(height=1)
    print(p)
    dev.new(height=1)
    p <- p + scale_y_continuous(breaks=c(15,30),minor_breaks=c(10,20,25))
    print(p)
    

    诀窍是 scale_y_continuous,您可以在其中指定中断和小中断。

    编辑:

    您可能无法为每个方面单独指定中断。 一种解决方法是通过以下方式控制休息的美感:

    Trans$input_breaks<-function(., range) {
        pretty(range, n=3)
    }
    print(p)
    

    改变“n=3”会产生不同的美感。

    再次编辑:

    这里是完整的例子:

    library(ggplot2)
    p <- ggplot(mtcars, aes(wt, mpg))+geom_point()
    Trans$input_breaks<-function(., range) {
        pretty(range, n=100)
    }
    print(p)
    

    在这种情况下,您可能会看到一百个滴答声。 通过更改 n=100,您可以自定义它。

    请注意,这有副作用。在此之后的所有图都具有相同的刻度数,并且 x 和 y 轴具有相同的刻度数。

    【讨论】:

    • 太棒了!现在它工作正常,多面图中的间距远不那么“拥挤”。 x 轴上的时间完全不受影响。非常感谢!
    • 好。而 x 轴上的时间不受影响的原因是日期、时间等的比例对休息有不同的计算。可能只有连续规模会受到影响。
    • 我猜Trans$input_breaks不适用于最新版本的ggplot2(我收到错误object 'Trans' not found)。知道如何在新版本中执行此操作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    • 1970-01-01
    相关资源
    最近更新 更多