Reordering groups in Likert plots with R

前端 未结 3 1253
时光取名叫无心
时光取名叫无心 2021-01-01 02:36

I\'m using the jbryer/likert package to plot Likert data.

Consider the response table, called items—here, A, B, and so on are

相关标签:
3条回答
  • 2021-01-01 03:00

    You can do this using the group.order parameter to specify the order. Use the names() function to obtain the names of the columns.

    plot(likert_var, group.order=names(results)) 
    
    0 讨论(0)
  • 2021-01-01 03:13

    I decided to re-implement this myself, as jon suggested:

    # additional requirements
    library(ggplot2)
    library(reshape2)
    library(RColorBrewer)
    
    # create summary table
    table_summary = likert(items)
    
    # reshape results
    results = melt(table_summary$results, id.vars='Item')
    
    # reorder results
    results$Item = factor(results$Item, levels=c("LT", "ST", "SemTag", "SemTagContext"))
    
    # some defaults
    ymin = 0
    text.size = 3
    
    ggplot(results, aes(y=value, x=Item, group=Item)) + 
      geom_bar(stat='identity', aes(fill=variable)) + 
      ylim(c(-5,105)) + 
      coord_flip() +
      scale_fill_manual('Response', values=brewer.pal(7, "RdYlGn"), 
                  breaks=levels(results$variable), 
                  labels=levels(results$variable)) +
      geom_text(data=table_summary$summary, y=ymin, aes(x=Item, 
                  label=paste(round(low), '%', sep='')), 
                  size=text.size, hjust=1) +
      geom_text(data=table_summary$summary, y=100, aes(x=Item,
                  label=paste(round(high), '%', sep='')), 
                  size=text.size, hjust=-.2) +
      ylab('Percentage') + xlab('')
    

    This produces the correct order:

    0 讨论(0)
  • 2021-01-01 03:27

    I added a pull request to Jason Bryer's package that adds fullname attributes to the columns, which are then used when you plot. Detailed writeup here http://reganmian.net/blog/2013/10/02/likert-graphs-in-r-embedding-metadata-for-easier-plotting/

    Given that addition, you can do

    db <- likert_add_fullnames(db, c(
      "X7"="Do you use sites like Facebook, Twitter, or GPlus?",
      "X8"="Do you participate in online communities organised around your interests? 
        (could be juggling, cooking, sports or academics, for example)?",
      "X10"="Do you know of online communities relevant to your discipline or the 
        courses you are taking now?"))
    ...
    

    and then these names will be reflected when you plot.

    0 讨论(0)
提交回复
热议问题