gpt4 book ai didi

r - ggplot facets 中的单独排序

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

所以我有一个简单的例子——一个完全交叉的三处理三上下文实验,其中测量了每个处理上下文对的连续效应。我想按效果对每个处理进行排序,分别根据每个上下文,但我坚持使用 ggplot 的方面。

这是我的数据

df <- data.frame(treatment = rep(letters[1:3], times = 3),
context = rep(LETTERS[1:3], each = 3),
effect = runif(9,0,1))

如果我将处理和上下文合并为一个 9 分制,我可以获得非常接近的结果,例如:
df$treat.con <- paste(df$treatment,df$context, sep = ".")
df$treat.con <- reorder(df$treat.con, -df$effect, )

ggplot(df, aes(x = treat.con, y = effect)) +
geom_point() +
facet_wrap(~context,
scales="free_x",
ncol = 1)

very close to what i want

除了在每个方面实现单独的排序之外,我创建的新 x 变量可能会产生误导,因为它没有证明我们在所有三个上下文中都使用了相同的处理方式。

这是通过对潜在因素的某种操作来解决的,还是有针对这种情况的 ggplot 命令?

最佳答案

Faceting 并不是真正适合您想做的事情,因为它确实是为共享尺度的情况而设计的。

单独制作每个图然后使用 grid.arrange 排列它们可能更有意义。来自 gridExtra 包裹。 (请注意,如果您不熟悉这些工具,以下代码可能看起来有点难以理解!)

#I use stringsAsFactors simply to ensure factors on
# my system.
df <- data.frame(treatment = rep(letters[1:3], times = 3),
context = rep(LETTERS[1:3], each = 3),
effect = runif(9,0,1),stringsAsFactors = TRUE)

require(gridExtra)
#One "master" plot (to rule them all)
p <- ggplot(df,aes(x = treatment,y = effect)) +
geom_point() +
facet_wrap(~context)

#Split data set into three pieces
df_list <- split(df,df$context)
#...and reorder the treatment variable of each one
df_list <- lapply(df_list,function(x){x$treatment <- reorder(x$treatment,-x$effect); x})

#"Re-do" the plot p using each of our three smaller data sets
# This is the line that might be the most mysterious
p_list <- lapply(df_list,function(dat,plot){plot %+% dat},plot = p)

#Finally, place all three plots on a single plot
do.call(grid.arrange,p_list)

enter image description here

关于r - ggplot facets 中的单独排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11364326/

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