缺少条形图上的LIkert打印标签

缺少条形图上的LIkert打印标签,r,likert,R,Likert,当我用R中的因子对数据进行分组时,我似乎无法在这些条上绘制百分比标签。有什么想法吗?谢谢大家! # Load libraries library(ggplot2) # for plotting library(likert) # for analyzing likert data library(plyr) # for using plot.percents=TRUE # Create dataset q1_pre <- c("Stron

当我用R中的因子对数据进行分组时,我似乎无法在这些条上绘制百分比标签。有什么想法吗?谢谢大家!

# Load libraries
library(ggplot2)        # for plotting
library(likert)         # for analyzing likert data
library(plyr)           # for using plot.percents=TRUE

# Create dataset
q1_pre <- c("Strongly agree", "Strongly agree", "Strongly agree", "Strongly agree", "Disagree", "Neither", "NA", "Somewhat agree", "Somewhat disagree","Neither")
q2_pre <- c("Strongly agree", "Strongly agree", "Strongly agree", "Strongly agree", "Disagree", "Neither", "NA", "Somewhat agree", "Somewhat disagree","Neither")

lab_pre <- rep("pre", length(q1_pre))
pre <- cbind(lab_pre, q1_pre, q2_pre)

q1_post <- c("Strongly disagree", "Strongly disagree", "Strongly disagree", "Strongly disagree", "Strongly disagree", "Neither", "NA", "Somewhat disagree", "Somewhat agree","Neither")
q2_post <-c("Strongly disagree", "Strongly disagree", "Strongly disagree", "Strongly disagree", "Strongly disagree", "Neither", "NA", "Somewhat disagree", "Somewhat agree","Neither")
lab_post <- rep("post", length(q1_post))
post <- cbind(lab_post, q1_post, q2_post)

df <- data.frame(rbind(pre, post))
df_lev <- rev(c("Strongly agree", "Somewhat agree", "Neither", "Somewhat disagree", "Strongly disagree", "NA"))

for (i in 2:ncol(df)) {
    df[ , i] <- factor(df[, i], levels=df_lev)
}

# Convert to likert structure
df.likert <- likert(df[2:ncol(df)], grouping=df$lab_pre)

# Plot
quartz(width=8, height=6)                   
plot <- plot(df.likert, text.size=4, plot.percents=T, centered=FALSE,   
                      colors=c("gray25","#CA0020", "#F4A582", "gray80", "#92C5DE", "#0571B0"))  +
         theme(text=element_text(size=14), legend.box.background=element_rect(color="white"),                          legend.title=element_text(size=8), legend.position="bottom", plot.title = element_text(hjust=0.5)) + 
         ylab("% of Participants") +
         guides(fill=guide_legend(nrow=2, title="", reverse=T)) +
         ggtitle("Title") +
         theme(axis.text.x=element_text(color="black"))

plot

#加载库
库(ggplot2)#用于绘图
图书馆(likert)#用于分析likert数据
库(plyr)#用于使用绘图。百分比=真
#创建数据集

q1_pre查看
likert.bar.plot
的代码,似乎有一个奇怪的部分应该警告组+绘图百分比:

if (FALSE & plot.percents) {
            warning("plot.percents is not currenlty supported for grouped analysis.")
        }
基本上,您可以重新计算文本的位置,并使用
geom_text()
将其放回原处。请尝试以下操作,注意您不需要库
plyr
,如果已加载,请确保在
dplyr
之前加载,否则会导致很多问题:

library(ggplot2)
library(likert)
#library(plyr)
library(dplyr)

func = function(X){
offset=sum(X[X<0])
cumsum(abs(X))+offset - abs(X)/2
}

p <- plot(df.likert, text.size=4, plot.percents=TRUE)

label_data = p$data %>% 
group_by(Group,Item) %>% 
mutate(perc=round(abs(value),digits=1),value=func(value)) %>%
filter(perc!=0)

p + geom_text(data=label_data,aes(label=paste0(perc,"%")),size=2)
库(ggplot2)
图书馆(利克特)
#图书馆(plyr)
图书馆(dplyr)
func=函数(X){
偏移量=总和(X[X%
变异(perc=round(abs(值),digits=1,value=func(值))%>%
过滤器(perc!=0)
p+geom_文本(数据=标签数据,aes(标签=粘贴0(perc,“%”),大小=2)

查看
likert.bar.plot
的代码,似乎有一个奇怪的部分应该警告组+绘图百分比:

if (FALSE & plot.percents) {
            warning("plot.percents is not currenlty supported for grouped analysis.")
        }
基本上,您可以重新计算文本的位置,并使用
geom_text()
将其放回原处。请尝试以下操作,注意您不需要库
plyr
,如果已加载,请确保在
dplyr
之前加载,否则会导致很多问题:

library(ggplot2)
library(likert)
#library(plyr)
library(dplyr)

func = function(X){
offset=sum(X[X<0])
cumsum(abs(X))+offset - abs(X)/2
}

p <- plot(df.likert, text.size=4, plot.percents=TRUE)

label_data = p$data %>% 
group_by(Group,Item) %>% 
mutate(perc=round(abs(value),digits=1),value=func(value)) %>%
filter(perc!=0)

p + geom_text(data=label_data,aes(label=paste0(perc,"%")),size=2)
库(ggplot2)
图书馆(利克特)
#图书馆(plyr)
图书馆(dplyr)
func=函数(X){
偏移量=总和(X[X%
变异(perc=round(abs(值),digits=1,value=func(值))%>%
过滤器(perc!=0)
p+geom_文本(数据=标签数据,aes(标签=粘贴0(perc,“%”),大小=2)

Hi Edusolar。如果你添加了一个its,其他人会更容易找到你问题的解决方案。这样你就可以帮助其他人帮助你!你的代码似乎将base
plot
与各种ggplot2函数混合在一起,这不应该起作用。正如dario所说,你能提供一个可复制的示例,即一个小的可运行代码演示吗复制你的问题?刚才用一个例子编辑了我上面的代码。谢谢你的想法!嗨,Edusaultor。如果你添加一个its,其他人会更容易找到解决你问题的方法。这样你可以帮助其他人帮助你!你的代码似乎混合了base
plot
和各种ggplot2函数,这不应该起作用。正如dario所说,可以您提供了一个可复制的示例,即一个可运行代码的小演示,它可以复制您的问题?刚才用一个示例编辑了上面的代码。谢谢您的想法!