6

我正在使用jbryer/likert来绘制李克特数据。

考虑响应表,称为items— 此处,AB等是列名,而不是数据的一部分:

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

我怎样才能使它保留顺序并返回 , , , 中的条形DC或者B使用A我的新组名:SemTagContext, SemTag, ST, LT

注:以上数据表有所删减。图中的条形宽度不反映这个简短的数据示例,而是我拥有的完整数据集。问题是一样的。

4

3 回答 3

6

正如乔恩建议的那样,我决定自己重新实现这一点:

# 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('')

这会产生正确的顺序:

于 2013-01-19T15:50:32.897 回答
5

您可以使用 group.order 参数来指定顺序。使用 names() 函数获取列的名称。

plot(likert_var, group.order=names(results)) 
于 2017-08-17T15:19:13.680 回答
2

我向 Jason Bryer 的包添加了一个拉取请求,该请求将全名属性添加到列中,然后在您绘图时使用这些属性。详细的文章在这里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?"))
...

然后这些名称将在您绘制时反映出来。

于 2013-10-02T22:01:20.170 回答