gpt4 book ai didi

r - 使用 scales = 'free' 在 facet_wrap 中设置 x/y 限制

转载 作者:行者123 更新时间:2023-12-04 07:53:02 26 4
gpt4 key购买 nike

我看到有人问过类似的问题,以及有关向 添加功能的讨论。 ggplot Setting x/y lim in facet_grid .在我的研究中,我经常想生成几个面板图,比如不同的模拟试验,其中轴限制保持不变以突出试验之间的差异。这在演示文稿中显示绘图面板时特别有用。在我制作的每个面板图中,各个图需要独立的 y 轴,因为它们通常是天气变量、温度、相对湿度、风速等。使用

    ggplot() + ... + facet_wrap(~ ..., scales = 'free_y')

效果很好,因为我可以轻松生成不同天气变量的绘图面板。
example weather variable plot panel当我比较不同的绘图面板时,有一致的轴很好。不幸的是 ggplot 无法在面板图中设置每个图的单独限制。它默认使用给定数据的范围。上面链接的 Google Group 讨论讨论了这个缺点,但我找不到关于是否可以添加的任何更新。有没有办法骗 ggplot 设置个人限制?

最佳答案

第一个有点回避我正在寻找的解决方案的建议是将我的所有数据合并到一个数据表中并使用 facet_grid 关于我的变量和模拟

    ggplot() + ... + facet_grid(variable~simulation, scales = 'free_y')

这会产生一个漂亮的图,在一个图中显示数据,但在考虑许多模拟时可能会变得笨拙。
facet_grid solution

为了“破解”绘图以生成我想要的内容,我首先确定了我对每个天气变量所需的限制。这些限制是通过查看所有感兴趣的模拟的最大范围找到的。确定后,我创建了一个与模拟数据具有相同列的小数据表,并将其附加到末尾。我的模拟数据具有结构
    'year' 'month' 'variable' 'run' 'mean'
1973 1 'rhmax' 1 65.44
1973 2 'rhmax' 1 67.44
... ... ... ... ...
2011 12 'windmin' 200 0.4

所以我创建了一个具有相同列的新数据表
    ylims.sims <- data.table(year = 1, month = 13, 
variable = rep(c('rhmax','rhmin','sradmean','tmax','tmin','windmax','windmin'), each = 2),
run = 201, mean = c(20, 100, 0, 80, 100, 350, 25, 40, 12, 32, 0, 8, 0, 2))

这使
    'year' 'month' 'variable' 'run' 'mean'
1 13 'rhmax' 201 20
1 13 'rhmax' 201 100
1 13 'rhmin' 201 0
1 13 'rhmin' 201 80
1 13 'sradmean' 201 100
1 13 'sradmean' 201 350
1 13 'tmax' 201 25
1 13 'tmax' 201 40
1 13 'tmin' 201 12
1 13 'tmin' 201 32
1 13 'windmax' 201 0
1 13 'windmax' 201 8
1 13 'windmin' 201 0
1 13 'windmin' 201 2

虽然年份和运行的选择是任意的,但月份的选择需要是 1:12 以外的任何东西。然后我将其附加到我的模拟数据中
    sim1data.ylims <- rbind(sim1data, ylims)
ggplot() + geom_boxplot(data = sim1data.ylims, aes(x = factor(month), y = mean)) +
facet_wrap(~variable, scale = 'free_y') + xlab('month') +
xlim('1','2','3','4','5','6','7','8','9','10','11','12')

当我用 y 限制绘制这些数据时,我将 x 轴值限制为原始数据中的值。带有 y 限制的附加数据表的月份值为 13。由于 ggplot 仍然将轴缩放到整个数据集,即使轴受到限制,这也给了我我想要的 y 限制。重要的是要注意,如果数据值大于您指定的限制,这将不起作用。

之前:注意面板之间每个天气变量的 y 限制差异。

before sims
before sims covars

之后:现在 y 限制对于面板之间的每个天气变量保持一致。
enter image description here

enter image description here

我希望在 future 几天内编辑这篇文章,并添加一个可重现的示例以获得更好的解释。如果您听说过有关将此功能添加到 的任何消息,请发表评论。 ggplot .

关于r - 使用 scales = 'free' 在 facet_wrap 中设置 x/y 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28490337/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com