按频率和字母顺序重新排序 ggplot R 中的条形图

问题描述 投票:0回答:1

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()
r ggplot2 plot bar-chart
1个回答
0
投票

我确信有更优雅的方法可以做到这一点,但这可能是一种选择。我所做的是根据“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()

© www.soinside.com 2019 - 2024. All rights reserved.