Likert软件包-include.histogram+;ggsave

Likert软件包-include.histogram+;ggsave,r,ggplot2,histogram,reshape2,R,Ggplot2,Histogram,Reshape2,我使用jbryer提供的包来绘制likert数据,到目前为止,该数据工作得相当好 1.但当我将include.histogram=TRUE添加到现有绘图中时,我会收到一个错误,显示: 二进制运算符的非数值参数 请参阅提供的示例数据集:以及我在其上执行的代码(我的数据帧称为rawdata) 库(ggplot2) 图书馆(E2) 图书馆(利克特) 需要(devtools) 安装\u github('likert','jbryer')) 这可能是一个bug,或者至少是在plot.likert(…) 以

我使用jbryer提供的包来绘制likert数据,到目前为止,该数据工作得相当好

1.但当我将
include.histogram=TRUE
添加到现有绘图中时,我会收到一个错误,显示:

二进制运算符的非数值参数

请参阅提供的示例数据集:以及我在其上执行的代码(我的数据帧称为rawdata)

库(ggplot2)
图书馆(E2)
图书馆(利克特)
需要(devtools)
安装\u github('likert','jbryer'))

这可能是一个bug,或者至少是在
plot.likert(…)


以下是第2部分的答案。我得回到第一部分

ggsave函数将保存最后一个 呼叫ggplot。因为柱状图和条形图(左侧)是两个 单独调用ggplot,ggsave将只保存最后一个。试试这个 相反:

注意,对于其他文件,除pdf外,还有其他函数
地层(例如巴布亚新几内亚)。它们还有宽度和高度参数。

非常感谢你,jbryer。你能为发布的第1部分提供一个答案吗?include.historogram=TRUE可能不是所有时间的函数?我发现如果我写“include.historogram=FALSE”,我不会得到任何错误。不幸的是,上面给出的用于保存MyLikerPlot的解决方法对我来说不起作用。另一方面,如果直方图是关闭的,ggsave会完成它的工作。这是一个很棒的工作,jihoward。非常感谢。我宁愿简单地保留它,看看likert包的作者是否提供了解决该问题的方法,否则我将返回到您的演练中。因为您是新手,请参见。
library(ggplot2)
library(reshape2)
library(likert)
require(devtools)
install_github('likert', 'jbryer')

teaching_liking <- rawdata[, substr(names(rawdata), 1, 4) == "B004"]
teaching_liking <- rename(teaching_liking, c(B004_01 = "expertise in the subject", B004_02 = "ability to engage students", B004_03 = "clarity", B004_04 = "attendance and punctuality to lessons", B004_05 = "attendance and punctuality to office hours", B004_06 = "availability to the relationship with students"))
i <- 1
while(i<=ncol(teaching_liking)) {
  teaching_liking[[i]] = factor(teaching_liking[[i]],labels = c("Not at all", "A bit", "Enough", "Much"), levels=c(1:4))
  i <- i + 1
}
teaching_liking_plot <- likert(teaching_liking)
p <- plot(teaching_liking_plot, centered = FALSE, wrap = 30, include.histogram = TRUE) + ggtitle("How satisfied are you with the following aspects?*")
g <- arrangeGrob(p, sub = textGrob("*Order of questions were randomized in questionaire.", x = 0, hjust = -0.1, vjust=0.1, gp = gpar(fontface = "italic", fontsize = 10)))
print(p)
ggsave((filename="teaching_liking.pdf"), scale = 1, width = par("din")[1], height = par("din")[2], units = c("in", "cm", "mm"), dpi = 300, limitsize = TRUE, g)
p <- plot(teaching_liking_plot, centered = FALSE, wrap = 30, include.histogram = F) 
class(p)
# [1] "likert.bar.plot" "gg"              "ggplot"         

p <- plot(teaching_liking_plot, centered = FALSE, wrap = 30, include.histogram = T) 
class(p)
 # [1] "NULL"
## Version of likert analysis, with missing response histogram
libs <- list("reshape2","plyr","ggplot2","gridExtra","scales","RColorBrewer","data.table")
z    <- lapply(libs,library,character.only=T)

rawdata <- fread("example.csv")   # read rawdata into a data.table
teaching_liking <- rawdata[substr(names(rawdata), 1, 4) == "B004"]
# set up category and response labels
categories <- c(B004_01 = "expertise in the subject", 
                B004_02 = "ability to engage students", 
                B004_03 = "clarity", 
                B004_04 = "attendance and punctuality to lessons", 
                B004_05 = "attendance and punctuality to office hours", 
                B004_06 = "availability to the relationship with students")
responses  <- c("Not at all", "A bit", "Enough", "Much")
# create the barplot of responses by category
ggB <- melt(teaching_liking, measure.vars=1:6, value.name="Response", variable.name="Category")
ggB[,resp.above:=sum(Response>2,na.rm=T)/sum(Response>0,na.rm=T),by=Category]
ggB[,resp.below:=sum(Response<3,na.rm=T)/sum(Response>0,na.rm=T),by=Category]
ggB[,Category:=reorder(Category,resp.above)]    # sets the order of the bars
ggT <- unique(ggB[,list(Category,resp.below,resp.above)])
ggT[,label.below:=paste0(round_any(100*resp.below,1),"%")]
ggT[,label.above:=paste0(round_any(100*resp.above,1),"%")]
cat <- categories[levels(ggB$Category)]                       # category labels
cat <- lapply(strwrap(cat,30,simplify=F),paste,collapse="\n") # word wrap
ggBar <- ggplot(na.omit(ggB)) + 
  geom_histogram(aes(x=Category, fill=factor(Response)),position="fill")+
  geom_text(data=ggT,aes(x=Category, y=-.05, label=label.below),hjust=.5, size=4)+
  geom_text(data=ggT,aes(x=Category, y=1.05, label=label.above),hjust=.5, size=4)+
  theme_bw()+
  theme(legend.position="bottom")+
  labs(x="",y="Percent")+
  scale_y_continuous(labels=percent)+
  scale_x_discrete(labels=cat)+
  scale_fill_manual("Response",breaks=c(1,2,3,4),labels=responses, values=brewer.pal(4,"BrBG"))+
  coord_flip()
ggBar
# create the histogram of Missing/Completed by category
ggH <- ggB[,list(Missing=sum(is.na(Response)),Completed=sum(!is.na(Response))),by="Category,resp.above"]
ggH[,Category:=reorder(Category,resp.above)]
ggH <- melt(ggH, measure.vars=3:4)
ggHist <- ggplot(ggH) +
  geom_bar(data=subset(ggH,variable=="Missing"),aes(x=Category,y=-value, fill=variable),stat="identity")+
  geom_bar(data=subset(ggH,variable=="Completed"),aes(x=Category,y=+value, fill=variable),stat="identity")+
  geom_hline(yintercept=0)+
  theme_bw()+
  theme(legend.position="bottom")+
  theme(axis.text.y=element_blank())+
  labs(x="",y="n")+
  scale_fill_manual("",values=c("grey80","dark red"),breaks=c("Missing","Completed"))+
  coord_flip()
ggHist
# put it all together in a grid object, then save to pdf
grob <- arrangeGrob(ggBar,ggHist,ncol=2,widths=c(0.75,0.25),
                    main= textGrob("How satisfied are you with the following aspects?*", 
                                   hjust=.6, vjust=1.5,
                                   gp = gpar(fontsize = 14)),
                    sub = textGrob("*Order of questions were randomized in questionaire.", 
                                   x = 0, hjust = -0.1, vjust=0.1, 
                                   gp = gpar(fontface = "italic", fontsize = 10)))
grob
ggsave(file="teaching_liking.pdf",grob)
pdf(‘mylikertplot.pdf’)
plot(l)
dev.off()