【问题标题】:How can I reorder the x axis in a plot in R?如何在 R 的图中重新排序 x 轴?
【发布时间】:2013-05-16 12:53:52
【问题描述】:

在 R 中使用 plot 会导致 x 轴上的因子按字母顺序排列。

如何指定 x 轴上因子的顺序?

例子:

y <- 1:9
x <- c(rep("B", 3), rep("A", 3), rep("C", 3))
plot(y ~ as.factor(x))

这会导致:

我怎样才能让它绘制为“B”、“A”、“C”?

【问题讨论】:

    标签: r plot


    【解决方案1】:

    您只需要按照您想要的顺序指定因子的水平。所以这里我新建一个变量x1

    x1  = factor(x, levels=c("B", "C", "A"))
    

    在哪里

    R> x1
    [1] B B B A A A C C C
    Levels: B C A
    

    plot 函数现在可以正常工作了。

    plot(y ~ x1)
    

    【讨论】:

    【解决方案2】:

    您似乎想根据每个箱形图的 50% 值以某种形式的顺序绘制它们?以不同的数据框为例:

    temp <- structure(list(
      Grade = c("U","G", "F", "E", "D", "C", "B", "A", "A*"), 
      n = c(20L, 13L, 4L, 13L, 36L, 94L, 28L, 50L, 27L)), 
      .Names = c("Grade", "n"), 
      class = c("tbl_df", "data.frame"), 
      row.names = c(NA, -9L))
    

    如果我们绘制这个,我们可以看到标签是混乱的(A 在 A* 之前)。

    library(ggplot2)
    ggplot(temp) + 
    geom_bar(stat="identity", aes(x=Grade, y=n))
    

    我们可以如上所示手动排序,或者我们可以决定按照每个成绩的学生人数的顺序绘制成绩。这也可以手动完成,但如果我们可以自动完成会更好:

    首先我们订购数据框:

    library(dplyr)
    temp <- temp %>% arrange(n)
    

    然后我们改变Grade列内的层级来表示数据的顺序

    temp$Grade <- as.vector(temp$Grade) #get rid of factors
    temp$Grade = factor(temp$Grade,temp$Grade) #add ordered factors back
    

    运行上面显示的相同图形命令,您可以使用不同顺序的 x 轴绘制数据。

    【讨论】:

      【解决方案3】:

      在 ggplot 中,除了更改外部数据的顺序之外,您还可以使用以下命令简单地指定图中的顺序:

      +scale_x_discrete(limits = c("B","A","C"))
      

      当然,这仅适用于类别数量有限的情况!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-08
        • 2019-06-23
        • 1970-01-01
        • 2021-09-04
        • 2021-01-12
        • 1970-01-01
        相关资源
        最近更新 更多