如何在x轴上排序包含字母和数字的一组变量名?因此,这些来自调查,其变量的格式类似于下面的var1
。但是在绘制时,它们显示为out_1
,out_10
,out_11
...
但是我要绘制out_1
,out_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()
答案 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))
两种情况都会产生相同的结果:
您也可以使用它来提供个性化标签;无需创建新变量:
ggplot(df, aes(var1, var2)) +
geom_boxplot() +
scale_x_discrete('output', labels = gsub('out_', '', unique(df$var1)))
检查?discrete_scale
以获得详细信息。您可以将breaks
和labels
组合使用,包括使用来自data.frame外部的标签:
pers.labels <- paste('Output', 1:12)
ggplot(df, aes(var1, var2)) +
geom_boxplot() +
scale_x_discrete(NULL, labels = pers.labels)