I\'m using the jbryer/likert package to plot Likert data.
Consider the response table, called items
—here, A
, B
, and so on are
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))
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:
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.