ggplot 中的条形图会自动按字母顺序排列。我的图实际上是按字母顺序颠倒绘制的,我可以颠倒字母顺序并将其向前推进。 如果我设置按频率对图进行排序的条件,则具有相同频率的类会按反字母顺序出现在图中。
这就是情节的作用:
G - 60
T - 50
C - 40
B - 40
A - 40
这就是我需要的情节:
G - 60
T - 50
A - 40
B - 40
C - 40
这是我编写的用于按频率对绘图进行排序的代码,但我无法找出可行的替代方案。我看到可以添加一个功能来“重新排序”,但我不知道如何在这里使用它。
ggplot(data) +
aes(x = reorder(Names, Frequency), y = Frequency)
编辑
数据:
fam_sub <- structure(
list(
Abs_fam.Var1 = c(
"Apio",
"Myria",
"Xyla",
"Rhyti",
"Hypo",
"Phaci"
),
Abs_fam.Freq = c(1L, 1L, 1L, 2L, 8L, 53L)
),
row.names = c(NA,-6L),
groups = structure(
list(
Abs_fam.Freq = c(1L, 2L, 8L, 53L),
.rows = structure(
list(1:3, 4L, 5L, 6L),
ptype = integer(0),
class = c("vctrs_list_of",
"vctrs_vctr", "list")
)
),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA,-4L),
.drop = TRUE
),
class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
剧情代码:
library(ggplot2)
ggplot(fam_sub, aes(x = reorder(Abs_fam.Var1, Abs_fam.Freq), y = Abs_fam.Freq)) +
geom_col(fill = "#559355") +
coord_flip() +
theme_minimal()
我确信有更优雅的方法可以做到这一点,但这可能是一种选择。我所做的是根据“Abs_fam.Freq”列的第一个频率分配级别,然后按“Abs_fam.Var1”的字母顺序排列。
lvs <- arrange(fam_sub, Abs_fam.Freq, desc(Abs_fam.Var1))$Abs_fam.Var1
fam_sub_2 <- fam_sub %>%
mutate(Abs_fam.Var1 = factor(Abs_fam.Var1, levels = lvs))
ggplot(fam_sub_2, aes(x = Abs_fam.Var1, y = Abs_fam.Freq)) +
geom_col(fill = "#559355") +
coord_flip() +
theme_minimal()