gpt4 book ai didi

r - 使用 facet_grid 时,我可以为 x 和 y 以外的美学设置自由比例(例如尺寸)吗?

转载 作者:行者123 更新时间:2023-12-04 11:09:59 25 4
gpt4 key购买 nike

facet_grid 和 facet_wrap 有 scales 参数,据我所知,该参数允许每个图根据绘制的数据调整 x 和/或 y 轴的比例。由于根据 ggplot 的语法,x 和 y 只是许多美学中的两个,并且每种美学都有一个比例尺,所以我认为让每种美学自由选择是合理的,但到目前为止我还没有找到一种方法。

我试图特别针对大小设置它,因为有时变量存在不同的数量级,具体取决于我用于方面的组,并且每个组具有相同的比例会阻止查看组内差异。

一个可重现的例子:

set.seed(1)
x <- runif(20,0,1)
y <- runif(20,0,1)
groups <- c(rep('small', 10), rep('big', 10))
size_small <- runif(10,0,1)
size_big <- runif(10,0,1) * 1000

df <- data.frame(x, y, groups, sizes = c(size_small, size_big))

还有一个绘图的辅助函数:

basic_plot <- function(df) ggplot(df) + 
geom_point(aes(x, y, size = sizes, color = groups)) +
scale_color_manual(values = c('big' = 'red', 'small' = 'blue')) +
coord_cartesian(xlim=c(0,1), ylim=c(0,1))

如果我按原样绘制数据,我们会得到以下结果:

basic_plot(df)

Non faceted plot

蓝点比较小,但我们无能为力。如果我们添加方面:

basic_plot(df) +
facet_grid(~groups, scales = 'free')

Faceted plot

蓝点继续变小。但我想利用我将数据一分为二的事实,并允许大小比例调整到每个图的数据。我想要如下内容:

plot_big <- basic_plot(df[df$groups == 'big',])
plot_small <- basic_plot(df[df$groups == 'small',])

grid.arrange(plot_big, plot_small, ncol = 2)

What I want

是否可以在不诉诸这种微观管理或如下所示手动重新缩放尺寸的情况下完成?

df %>% 
group_by(groups) %>%
mutate(maximo = max(sizes),
sizes = scale(sizes, center = F)) %>%
basic_plot() +
facet_grid(~groups)

我可以设法做到这些,我只是想看看我是否没有错过另一个选项,或者我是否误解了图形语法。

感谢您的宝贵时间!

最佳答案

如前所述,调用 facet_wrap 时会保持原始情节的美感。由于您需要分组图,请考虑包装在 do.call 中的 base::by(子集数据框函数):

do.call(grid.arrange, 
args=list(grobs=by(df, df$groups, basic_plot),
ncol=2,
top="Grouped Point Plots"))

Grouped Plot Output


如果您需要分享图例,我总是使用 @Steven Lockton's answer 中的这个包装器

do.call(grid_arrange_shared_legend, by(df, df$groups, basic_plot))

Shared Legend Plot Output

关于r - 使用 facet_grid 时,我可以为 x 和 y 以外的美学设置自由比例(例如尺寸)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54578446/

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