排序字母数字变量以进行绘图

时间:2018-06-26 17:06:03

标签: r ggplot2 dplyr

如何在x轴上排序包含字母和数字的一组变量名?因此,这些来自调查,其变量的格式类似于下面的var1。但是在绘制时,它们显示为out_1out_10out_11 ...

但是我要绘制out_1out_2 ...

library(tidyverse)
var1<-rep(paste0('out','_', seq(1,12,1)), 100)
var2<-rnorm(n=length(var1) ,mean=2)
df<-data.frame(var1, var2)
ggplot(df, aes(x=var1, y=var2))+geom_boxplot()

我尝试过:

df %>% 
separate(var1, into=c('A', 'B'), sep='_') %>% 
arrange(B) %>%  
ggplot(., aes(x=B, y=var2))+geom_boxplot()

1 个答案:

答案 0 :(得分:1)

您可以在绘制之前对var1的水平进行排序:

levels(df$var1) <- unique(df$var1)
ggplot(df, aes(var1,var2)) + geom_boxplot()

或者您可以在ggplot标度选项中指定顺序:

ggplot(df, aes(var1,var2)) +
  geom_boxplot() +
  scale_x_discrete(labels = unique(df$var1))

两种情况都会产生相同的结果:

enter image description here

您也可以使用它来提供个性化标签;无需创建新变量:

ggplot(df, aes(var1, var2)) +
  geom_boxplot() +
  scale_x_discrete('output', labels = gsub('out_', '', unique(df$var1)))

enter image description here

检查?discrete_scale以获得详细信息。您可以将breakslabels组合使用,包括使用来自data.frame外部的标签:

pers.labels <- paste('Output', 1:12)

ggplot(df, aes(var1, var2)) +
  geom_boxplot() +
  scale_x_discrete(NULL, labels = pers.labels)

enter image description here