代码之家  ›  专栏  ›  技术社区  ›  spindoctor

为绘图排序字母数字变量

  •  0
  • spindoctor  · 技术社区  · 6 年前

    如何沿x轴排列一组包含字母和数字的变量名?所以这些来自于一项调查,其中变量的格式如下 var1 ,下方。但当他们被标出来的时候,他们就出现了 out_1 , out_10 out_11 ...

    但我想把它画出来 输出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()
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Carlos Eduardo Lagosta    6 年前

    你可以订购 var1 打印前:

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

    也可以在“绘图比例选项”中指定顺序:

    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 详情。你可以用 breaks labels 在不同的组合中,包括使用来自外部的标签数据框:

    pers.labels <- paste('Output', 1:12)
    
    ggplot(df, aes(var1, var2)) +
      geom_boxplot() +
      scale_x_discrete(NULL, labels = pers.labels)
    

    enter image description here