這可能是一個錯誤,或者至少無證行爲,在plot.likert(...)
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"
在第一種情況plot.likert(...)
不顯示的情節,但返回p
如爲「likert.bar.plot」對象。在第二種情況下,plot.likert(...)
確實顯示該圖,但返回NULL
(換句話說,p
設置爲NULL
)。這就是爲什麼當您嘗試將plot(..., include.histogram=T)
的結果添加到ggtitle(...)
時出現此錯誤的原因。
編輯
這裏有一個解決方法。生成下面的情節作爲可以保存,編輯等grob。代碼是在情節之後。不能完全匹配顏色,但非常接近。工作流程如下:
- 加載數據
- 設置的類別和反應標籤
- 按類別
- 創建丟失/已完成響應的條形圖創建的響應條形圖
- 合併成一個GROB與註釋
- 保存
## 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)
發佈上述編輯方法。 – jlhoward
這是一個很棒的工作,jihoward。非常感謝。我寧願簡單地保留它,看看這個ifrt軟件包的作者是否爲這個問題提供了一個解決方案,否則我會回到你的解決方案。 –
由於您是新手,因此請參閱[當某人回答我的問題時該怎麼辦?](http://stackoverflow.com/help/someone-answers)。 – jlhoward