使用 R 重新排序李克特图中的组

标签 r ggplot2

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

考虑名为 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 — 或者,使用我的新组名:SemTagContext , SemTag , ST , LT ?

注:以上数据表已缩短。图中的条形宽度不反射(reflect)这个简短的数据示例,而是我拥有的完整数据集。问题是一样的。

最佳答案

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

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

这会产生正确的顺序:

关于使用 R 重新排序李克特图中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14415674/

相关文章:

r - ggmap中的动态数据点标签定位

r - 绘图分组条形图不显示负值

r - ggplot2 - 突出显示最小/最大条

r - Ubuntu 中 R 和 Openfoam 之间的冲突

r - ggforce geom_circle 锯齿状且难看

r - 在 R 中的 split() 之后保持数据的原始顺序

r - 如何以整洁的方式重新排序因子水平?

R 将 table() 的输出保存到数据框中

java - 错误 : NoSuchMethodError (Java): org. apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(Ljava/util/zip/ZipInputStream;)V

r - 如何在 dplyr 管道中通过 .以编程方式?