订购多面点图
Ordering faceted dotplot
这是我使用以下代码创建的多面点图(post 末尾提供的 dput
格式的数据)。
ggplot(na.omit(df), aes(x = N, y = journal, group = journal, colour = studyType)) +
geom_segment(aes(yend = journal), xend=0, colour="grey50") +
geom_point(alpha = .8, size = 4) +
scale_color_manual(values = cp) +
theme_bw() +
facet_grid(.~studyType) +
theme(panel.grid.major.y = element_blank())
我现在的兴趣是对行(Y 轴)重新排序,因此它们基于整体 N 降序排列,计算为各个方面的总和。因此,BJoSW 期刊将排在第一位,然后是 H&SW,依此类推。在查看了关于该主题的其他 post 之后,解决方案似乎涉及使用整体汇总变量重新排序 y 变量 journal
。
j.order <- df$journal[order(df$N.sort, decreasing = TRUE)]
df$journal <- factor(df$journal, levels = j.order)
这会产生一条警告消息(不推荐使用重复的因子级别),因此这显然是不正确的。虽然这个数字越来越接近我想要的,但 ggplot
调用也在重复级别上给我警告消息。所以,我猜我的数据设置不正确,或者我没有正确处理缺失值。如有任何帮助,我们将不胜感激。
structure(list(journal = structure(c(43L, 43L, 35L, 35L, 30L,
30L, 30L, 37L, 37L, 47L, 1L, 1L, 1L, 1L, 48L, 20L, 20L, 20L,
13L, 13L, 13L, 8L, 8L, 45L, 45L, 16L, 16L, 16L, 16L, 26L, 26L,
39L, 39L, 10L, 10L, 10L, 49L, 23L, 23L, 23L, 28L, 28L, 33L, 33L,
41L, 41L, 50L, 5L, 5L, 5L), .Label = c("BJoSW", "BJoSW", "BJoSW",
"BJoSW", "JoESW", "JoESW", "JoESW", "Ch&S", "Ch&S", "H&SW", "H&SW",
"H&SW", "C&FSW", "C&FSW", "C&FSW", "CSWJ", "CSWJ", "CSWJ", "CSWJ",
"C&ASWJ", "C&ASWJ", "C&ASWJ", "IntJoSW", "IntJoSW", "IntJoSW",
"EJoSW", "EJoSW", "InSW", "InSW", "Affl", "Affl", "Affl", "JoBSW",
"JoBSW", "AdviSW", "AdviSW", "Aret", "Aret", "FmiS", "FmiS",
"JoCP", "JoCP", "AdmiSW", "AdmiSW", "CJoSW", "CJoSW", "ASW&PR",
"CSWR", "IndJoSW", "JoE&CDiSW"), class = "factor"), studyType = c("quasi",
"sr", "quasi", "rct", "quasi", "rct", "sr", "quasi", "rct", "rct",
"meta", "quasi", "rct", "sr", "rct", "quasi", "rct", "sr", "quasi",
"rct", "sr", "quasi", "rct", "quasi", "sr", "meta", "quasi",
"rct", "sr", "quasi", "rct", "quasi", "rct", "quasi", "rct",
"sr", "meta", "quasi", "rct", "sr", "quasi", "rct", "quasi",
"rct", "quasi", "rct", "quasi", "meta", "quasi", "rct"), N = c(1L,
1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 7L, 7L, 4L, 1L, 3L, 1L,
2L, 3L, 1L, 3L, 5L, 6L, 1L, 1L, 3L, 1L, 1L, 2L, 1L, 4L, 2L, 1L,
1L, 6L, 3L, 1L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L,
3L), N.sort = c(2L, 2L, 3L, 3L, 4L, 4L, 4L, 3L, 3L, 1L, 19L,
19L, 19L, 19L, 1L, 6L, 6L, 6L, 7L, 7L, 7L, 11L, 11L, 2L, 2L,
7L, 7L, 7L, 7L, 5L, 5L, 3L, 3L, 10L, 10L, 10L, 1L, 6L, 6L, 6L,
5L, 5L, 4L, 4L, 3L, 3L, 1L, 14L, 14L, 14L)), .Names = c("journal",
"studyType", "N", "N.sort"), row.names = c(NA, -50L), class = "data.frame")
试试这个:
j.order <- unique(df$journal[order(df$N.sort, decreasing = TRUE)])
df$journal <- factor(df$journal, levels = j.order)
注意:有点仓促,稍后会更新更多解释...
编辑:
问题是现有的 data.frame 中有重复的关卡。参见:
#Existing levels from posted dput data.frame
table(duplicated(levels(df$journal)))
#FALSE TRUE
# 22 28
我们需要修复两件事,制作独特的关卡,并按数字变量排序 N.sort
。
#make unique order based on N.sort
j.order <- unique(as.character(df$journal)[order(df$N.sort, decreasing = TRUE)])
#reassign journal as factor with new levels
df$journal <- factor(df$journal, levels = j.order)
有序情节:
这是我使用以下代码创建的多面点图(post 末尾提供的 dput
格式的数据)。
ggplot(na.omit(df), aes(x = N, y = journal, group = journal, colour = studyType)) +
geom_segment(aes(yend = journal), xend=0, colour="grey50") +
geom_point(alpha = .8, size = 4) +
scale_color_manual(values = cp) +
theme_bw() +
facet_grid(.~studyType) +
theme(panel.grid.major.y = element_blank())
我现在的兴趣是对行(Y 轴)重新排序,因此它们基于整体 N 降序排列,计算为各个方面的总和。因此,BJoSW 期刊将排在第一位,然后是 H&SW,依此类推。在查看了关于该主题的其他 post 之后,解决方案似乎涉及使用整体汇总变量重新排序 y 变量 journal
。
j.order <- df$journal[order(df$N.sort, decreasing = TRUE)]
df$journal <- factor(df$journal, levels = j.order)
这会产生一条警告消息(不推荐使用重复的因子级别),因此这显然是不正确的。虽然这个数字越来越接近我想要的,但 ggplot
调用也在重复级别上给我警告消息。所以,我猜我的数据设置不正确,或者我没有正确处理缺失值。如有任何帮助,我们将不胜感激。
structure(list(journal = structure(c(43L, 43L, 35L, 35L, 30L,
30L, 30L, 37L, 37L, 47L, 1L, 1L, 1L, 1L, 48L, 20L, 20L, 20L,
13L, 13L, 13L, 8L, 8L, 45L, 45L, 16L, 16L, 16L, 16L, 26L, 26L,
39L, 39L, 10L, 10L, 10L, 49L, 23L, 23L, 23L, 28L, 28L, 33L, 33L,
41L, 41L, 50L, 5L, 5L, 5L), .Label = c("BJoSW", "BJoSW", "BJoSW",
"BJoSW", "JoESW", "JoESW", "JoESW", "Ch&S", "Ch&S", "H&SW", "H&SW",
"H&SW", "C&FSW", "C&FSW", "C&FSW", "CSWJ", "CSWJ", "CSWJ", "CSWJ",
"C&ASWJ", "C&ASWJ", "C&ASWJ", "IntJoSW", "IntJoSW", "IntJoSW",
"EJoSW", "EJoSW", "InSW", "InSW", "Affl", "Affl", "Affl", "JoBSW",
"JoBSW", "AdviSW", "AdviSW", "Aret", "Aret", "FmiS", "FmiS",
"JoCP", "JoCP", "AdmiSW", "AdmiSW", "CJoSW", "CJoSW", "ASW&PR",
"CSWR", "IndJoSW", "JoE&CDiSW"), class = "factor"), studyType = c("quasi",
"sr", "quasi", "rct", "quasi", "rct", "sr", "quasi", "rct", "rct",
"meta", "quasi", "rct", "sr", "rct", "quasi", "rct", "sr", "quasi",
"rct", "sr", "quasi", "rct", "quasi", "sr", "meta", "quasi",
"rct", "sr", "quasi", "rct", "quasi", "rct", "quasi", "rct",
"sr", "meta", "quasi", "rct", "sr", "quasi", "rct", "quasi",
"rct", "quasi", "rct", "quasi", "meta", "quasi", "rct"), N = c(1L,
1L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 1L, 1L, 7L, 7L, 4L, 1L, 3L, 1L,
2L, 3L, 1L, 3L, 5L, 6L, 1L, 1L, 3L, 1L, 1L, 2L, 1L, 4L, 2L, 1L,
1L, 6L, 3L, 1L, 2L, 3L, 1L, 3L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L,
3L), N.sort = c(2L, 2L, 3L, 3L, 4L, 4L, 4L, 3L, 3L, 1L, 19L,
19L, 19L, 19L, 1L, 6L, 6L, 6L, 7L, 7L, 7L, 11L, 11L, 2L, 2L,
7L, 7L, 7L, 7L, 5L, 5L, 3L, 3L, 10L, 10L, 10L, 1L, 6L, 6L, 6L,
5L, 5L, 4L, 4L, 3L, 3L, 1L, 14L, 14L, 14L)), .Names = c("journal",
"studyType", "N", "N.sort"), row.names = c(NA, -50L), class = "data.frame")
试试这个:
j.order <- unique(df$journal[order(df$N.sort, decreasing = TRUE)])
df$journal <- factor(df$journal, levels = j.order)
注意:有点仓促,稍后会更新更多解释...
编辑:
问题是现有的 data.frame 中有重复的关卡。参见:
#Existing levels from posted dput data.frame
table(duplicated(levels(df$journal)))
#FALSE TRUE
# 22 28
我们需要修复两件事,制作独特的关卡,并按数字变量排序 N.sort
。
#make unique order based on N.sort
j.order <- unique(as.character(df$journal)[order(df$N.sort, decreasing = TRUE)])
#reassign journal as factor with new levels
df$journal <- factor(df$journal, levels = j.order)
有序情节: