我使用the jbryer/likert
package绘制了Likert数据。
考虑名为items
的响应表 - 此处,A
,B
等是列名,而不是数据的一部分:
A B C D
5 4 5 4
3 3 3 4
2 2 2 2
2 2 2 3
5 3 6 7
3 3 5 4
以下代码:
choices = c("Very low", "Low", "Rather low", "Neither low nor high", "Rather high", "High", "Very high")
for(i in 1:ncol(items)) {
items[,i] = factor(items[,i], levels=1:7, labels=choices, ordered=TRUE)
}
现在,我们将其转换为likert
数据并绘制它,它会使用ggplot
覆盖内置绘图函数:
plot(likert(items), ordered=FALSE)
这给了我:
冷却。全部订购。但A
,B
等作为条件的描述符没有意义,我想覆盖它们:
names(items) = c("LT", "ST", "SemTag", "SemTagContext")
这给了我错误的顺序:
查看ST
的首位,虽然它是B
的名称?我的订单已更改为B
,D
,C
,A
。
如何保留订单并返回D
,C
,B
,A
中的条形图,或者使用我的新组名称:{{ 1}},SemTagContext
,SemTag
,ST
?
注意:上面的数据表已缩短。图中的条宽不会反映这个简短的数据示例,而是我所拥有的完整数据集。问题是一样的。
答案 0 :(得分:5)
我决定自己重新实现这个,正如jon所说:
# 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('')
这会产生正确的顺序:
答案 1 :(得分:3)
您可以使用group.order参数指定顺序。使用names()函数获取列的名称。
plot(likert_var, group.order=names(results))
答案 2 :(得分:2)
我向Jason Bryer的程序包添加了一个pull请求,该程序包为列添加了fullname属性,然后在绘制时使用。详细说明http://reganmian.net/blog/2013/10/02/likert-graphs-in-r-embedding-metadata-for-easier-plotting/
鉴于添加,您可以
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?"))
...
然后在绘图时会反映这些名称。