根据第一个面板在 ggplot2 中的多面板图中排序因素
Sorting factors in multipanel plot in ggplot2 according to the first panel
是否可以根据第一个面板对 ggplot2
中的多面板图中的因素进行排序?第一个面板决定顺序,其余面板按照该顺序。
这是一个例子:
require(ggplot2)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X","Y"), each=20),
CLONE=rep(c("A","B","C","D","E"), each=4, 2),
TREAT=rep(c("T1","T2","T3","C"), 10),
VALUE=sample(c(1:10), 40, replace=T))
ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~TREAT)
这给了我这个情节:
现在我想根据 YEAR X
中的 VALUE
以降序(从高到低)对 CLONE
进行排序,但仅针对对照(C
控制板)。然后应为 T1
、T2
和 T3
维护此顺序。通过查看上面的图,我希望面板 C
排序为 CLONE C
、B
或 D
(均为 5)、A
和 E
. CLONE
的顺序应复制到其余面板。
在 ggplot 中没有简单的方法可以正确执行此操作,因为您必须通过以下方式重新排序 CLONE
3 个条件,TREAT、YEAR 和 VALUE,否则 forcats::fct_reorder2
可能是一个选项。
而是从 YEAR = "X" 对应的数据子集中提取 CLONE 的顺序,
TREAT = "C",并根据该子集重新定义整个数据集的因子水平。
library("ggplot2")
library("dplyr")
set.seed(36)
xx <- data.frame(YEAR = rep(c("X","Y"), each = 20),
CLONE = rep(c("A","B","C","D","E"), each = 4, 2),
TREAT = rep(c("T1","T2","T3","C"), 10),
VALUE = sample(c(1:10), 40, replace = TRUE), stringsAsFactors = FALSE)
clone_order <- xx %>% subset(TREAT == "C" & YEAR == "X") %>%
arrange(-VALUE) %>% select(CLONE) %>% unlist()
xx <- xx %>% mutate(CLONE = factor(CLONE, levels = clone_order))
ggplot(xx, aes(x = CLONE, y = VALUE, fill = YEAR)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~TREAT)
给予
是否可以根据第一个面板对 ggplot2
中的多面板图中的因素进行排序?第一个面板决定顺序,其余面板按照该顺序。
这是一个例子:
require(ggplot2)
set.seed(36)
xx<-data.frame(YEAR=rep(c("X","Y"), each=20),
CLONE=rep(c("A","B","C","D","E"), each=4, 2),
TREAT=rep(c("T1","T2","T3","C"), 10),
VALUE=sample(c(1:10), 40, replace=T))
ggplot(xx, aes(x=CLONE, y=VALUE, fill=YEAR)) +
geom_bar(stat="identity", position="dodge") +
facet_wrap(~TREAT)
这给了我这个情节:
现在我想根据 YEAR X
中的 VALUE
以降序(从高到低)对 CLONE
进行排序,但仅针对对照(C
控制板)。然后应为 T1
、T2
和 T3
维护此顺序。通过查看上面的图,我希望面板 C
排序为 CLONE C
、B
或 D
(均为 5)、A
和 E
. CLONE
的顺序应复制到其余面板。
在 ggplot 中没有简单的方法可以正确执行此操作,因为您必须通过以下方式重新排序 CLONE
3 个条件,TREAT、YEAR 和 VALUE,否则 forcats::fct_reorder2
可能是一个选项。
而是从 YEAR = "X" 对应的数据子集中提取 CLONE 的顺序,
TREAT = "C",并根据该子集重新定义整个数据集的因子水平。
library("ggplot2")
library("dplyr")
set.seed(36)
xx <- data.frame(YEAR = rep(c("X","Y"), each = 20),
CLONE = rep(c("A","B","C","D","E"), each = 4, 2),
TREAT = rep(c("T1","T2","T3","C"), 10),
VALUE = sample(c(1:10), 40, replace = TRUE), stringsAsFactors = FALSE)
clone_order <- xx %>% subset(TREAT == "C" & YEAR == "X") %>%
arrange(-VALUE) %>% select(CLONE) %>% unlist()
xx <- xx %>% mutate(CLONE = factor(CLONE, levels = clone_order))
ggplot(xx, aes(x = CLONE, y = VALUE, fill = YEAR)) +
geom_bar(stat = "identity", position = "dodge") +
facet_wrap(~TREAT)
给予