[英]Can I set free scales for aesthetics other than x and y (e.g. size) when using facet_grid?
facet_grid和facet_wrap有scale参数,据我所知,每个绘图都允许每个绘图调整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)
蓝点相对较小,但我们无能为力。 如果我们添加facet:
basic_plot(df) +
facet_grid(~groups, scales = 'free')
蓝点继续很小。 但我想利用这样一个事实:我将数据分成两部分,并允许尺寸比例调整到每个图的数据。 我希望得到以下内容:
plot_big <- basic_plot(df[df$groups == 'big',])
plot_small <- basic_plot(df[df$groups == 'small',])
grid.arrange(plot_big, plot_small, ncol = 2)
是否可以在不采用这种微观管理或手动重新缩放尺寸的情况下完成,如下所示?
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"))
如果你需要分享一个传奇,我总是使用@Steven Lockton答案中的这个包装器
do.call(grid_arrange_shared_legend, by(df, df$groups, basic_plot))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.