如何在R中的图中重新排序x轴?

DQd*_*dlM 11 plot r

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

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

例:

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

这导致:

在此输入图像描述

如何将其绘制为"B","A","C"?

csg*_*pie 14

您只需按所需顺序指定因子的级别.所以我在这里创建一个新变量x1

x1  = factor(x, levels=c("B", "C", "A"))
Run Code Online (Sandbox Code Playgroud)

哪里

R> x1
[1] B B B A A A C C C
Levels: B C A
Run Code Online (Sandbox Code Playgroud)

该plot功能现在按预期工作.

plot(y ~ x1)
Run Code Online (Sandbox Code Playgroud)


plu*_*uke 6

您似乎想根据每个箱形图的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))
Run Code Online (Sandbox Code Playgroud)

如果绘制此图,我们可以看到标签被弄乱了(A在A *之前)。

library(ggplot2)
ggplot(temp) + 
geom_bar(stat="identity", aes(x=Grade, y=n))
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我们可以如上所述手动订购,也可以决定按照获得每个年级的学生人数的顺序来绘制年级。这也可以手动完成,但是如果我们可以自动化它会更好:

首先我们订购数据框:

library(dplyr)
temp <- temp %>% arrange(n)
Run Code Online (Sandbox Code Playgroud)

然后我们更改Grade列内的级别以表示数据的顺序

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

运行上面显示的相同的graph命令,将为您提供以不同顺序的x轴绘制的数据。

在此处输入图片说明