r - ggplot:重新排序多面(棒棒糖)图
问题描述
我正在尝试生成一个多面的棒棒糖图,该图显示了特定期刊 (x) 在四个特定组 (grp) 中出现的频率。
我可以生成分面图,但我想按日志出现的次数(val)对每个方面(即 grp)进行排序。
我尝试调整因子级别和标签,但无法重新排序图表,以便每个 grp 都按 val 的降序排列。
ggplot(total) +
geom_segment( aes(x=x, xend=x, y=0, yend=val), color="grey") +
geom_point( aes(x=x, y=val, color=grp), size=3 ) +
coord_flip()+
facet_wrap(~grp, ncol=1, scale="free_y")
这是我的数据框的 dput 输出
structure(list(x = c("LANCET", "QUARTERLY JOURNAL OF ECONOMICS",
"WORLD DEVELOPMENT", "JOURNAL OF DEVELOPMENT ECONOMICS", "WORLD BANK ECONOMIC REVIEW",
"WORLD BANK RESEARCH OBSERVER", "JOURNAL OF DEVELOPMENT ECONOMICS",
"PLOS ONE", "WORLD BANK ECONOMIC REVIEW", "WORLD DEVELOPMENT",
"LANCET", "AMERICAN ECONOMIC REVIEW", "AGRICULTURAL ECONOMICS",
"AIDS", "CLIMATIC CHANGE", "ECONOMICS LETTERS", "HEALTH POLICY",
"HUMAN RESOURCES FOR HEALTH", "JOURNAL OF DEVELOPMENT STUDIES",
"JOURNAL OF AFRICAN ECONOMIES", "APPLIED ECONOMICS LETTERS",
"REVIEW OF FAITH & INTERNATIONAL AFFAIRS", "JOURNAL OF INTERNATIONAL DEVELOPMENT",
"WORLD DEVELOPMENT"), val = c(19L, 15L, 13L, 11L, 8L, 6L, 6L,
6L, 5L, 5L, 4L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 9L, 7L, 6L, 6L, 5L,
5L), grp = c("4", "4", "4", "4", "4", "4", "3", "3", "3", "3",
"3", "3", "2", "2", "2", "2", "2", "2", "1", "1", "1", "1", "1",
"1")), row.names = c(NA, -24L), class = "data.frame")
解决方案
ggplot2 中没有内置的方法来做你想做的事。但是有一种解决方法,您可以转换数据框并创建新列进行排序。
library(dplyr)
library(ggplot)
# ascending by val
plot_data <- total %>%
arrange(grp,val) %>% # sort data based on group and value
mutate(rank = row_number()) # this will be used as x axis
# descending by val
plot_data <- total %>%
arrange(grp,val) %>%
mutate(rank = nrow(total) - row_number() + 1)
plot_data %>%
ggplot() +
geom_segment( aes(x=rank, xend=rank, y=0, yend=val), color="grey") +
geom_point( aes(x=rank, y=val, color=grp), size=3 ) +
coord_flip()+
facet_wrap(~grp, ncol=1, scale="free_y") +
scale_x_continuous(
breaks = plot_data$rank, # specify tick breaks using rank column
labels = plot_data$x # specify tick labels using x column
)
上升
降序
您还可以阅读这篇博文以获得更深入的解释:
https://drsimonj.svbtle.com/ordering-categories-within-ggplot2-facets
推荐阅读
- r - r中的gather()函数在存在时找不到我的列
- gradle - jar 执行缺少类:NoClassDefFoundError
- python - 如何使用 seleinum 点击某物?javascript:void(0) 蟒蛇
- python - 在 Pandas 中具有重复索引且没有聚合函数的数据透视表
- java - 使用java从路径创建JSON
- sql - 存储过程参数检查非空字符串
- azure - 尝试向 Azure 订阅添加其他所有者时的奇怪现象
- swift - 使用 Charts API Swift 显示时间戳
- angular - RouterModule.forRoot() 再次调用了两次
- angular - 日期验证,以便不选择下一个日期