Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ho将geom_柱状图中计算的计数值添加到R中条形图顶部_R_Loops_Ggplot2_Histogram_Density Plot - Fatal编程技术网

Ho将geom_柱状图中计算的计数值添加到R中条形图顶部

Ho将geom_柱状图中计算的计数值添加到R中条形图顶部,r,loops,ggplot2,histogram,density-plot,R,Loops,Ggplot2,Histogram,Density Plot,我想在ggplot2上添加geom_直方图函数中计算的计数值。我已经将ggplot2放入一个循环中,这样我可以生成多个绘图,在我的例子中是30,但为了方便起见,这里有一个仅用于四个绘图的虚拟集。镶嵌面包裹不起作用,因为几何密度在计算比例之前汇集了所有因素的数据,而不是在一个因素/变量内。为了制作这个情节,我基本上混合了来自不同来源的一大堆代码,所以要归功于他们 library(dplyr) library(ggplot2)

我想在ggplot2上添加geom_直方图函数中计算的计数值。我已经将ggplot2放入一个循环中,这样我可以生成多个绘图,在我的例子中是30,但为了方便起见,这里有一个仅用于四个绘图的虚拟集。镶嵌面包裹不起作用,因为几何密度在计算比例之前汇集了所有因素的数据,而不是在一个因素/变量内。为了制作这个情节,我基本上混合了来自不同来源的一大堆代码,所以要归功于他们

              library(dplyr)
              library(ggplot2)
              library(ggridges)
              library(reshape2)
              library(gridExtra)
       #Make the data#       
        df.fact <- data.frame("A"=rnorm(400, mean = 350, sd=160),"B"=rnorm(400, mean = 300, sd=100), "C"=rnorm(400, mean = 200, sd=80), names=rep(factor(LETTERS[23:26]), 100))
        df.test<-melt(df.fact, id.vars = "names", value.name = "Length2")
        names(df.test)[names(df.test) =="variable"] <- "TSM.FACT"

    #Create the plotlist##      
        myplots <- list()

    #Loop for plots##
        for(i in 1:(length(unique(df.test$names)))){ 
          p1 <- eval(substitute(
            ggplot(data=df.test[df.test$names == levels(df.test$names)[i],], aes(x=Length2, group=TSM.FACT, colour = TSM.FACT, fill=TSM.FACT)) +
              geom_histogram(aes( y = stat(width*density)), position = "dodge", binwidth = 50, alpha =0.4, show.legend=T)+
              ggtitle(paste0(levels(df.test$names)[i]))+
              geom_density_line(stat="density", aes(y=(..count..)/sum(..count..)*50), alpha=0.3, size=0.5, show.legend=F) +
              geom_vline(data=ddply(df.test[df.test$names == levels(df.test$names)[i],], ~ TSM.FACT,  numcolwise(mean)), mapping=aes(xintercept = Length2, group=TSM.FACT, colour=TSM.FACT),  linetype=2, size=1, show.legend=F) +
              scale_y_continuous(labels = percent_format()) +
              ylab("relative frequency") +
              scale_color_manual(values= c("#00B2EE",  "#1E90FF",  "#104E8B")) +
              scale_fill_manual(values= c("#00B2EE",  "#1E90FF", "#104E8B")) +
            theme_bw() + theme(
              plot.title = element_text(lineheight=0.5, hjust= 0.5, size=10),
              strip.text.y = element_text(hjust = 1, angle = 0),
              strip.text.x = element_text(size=10, vjust = 0.9), 
              strip.text=element_text(margin = margin(t=0.3,r=1,b=0.3,l=1), size=8, debug = F, vjust=0.2),
              strip.background = element_blank(),
              axis.text.x = element_text(size=8, angle=0, vjust=0.2, margin = margin(t=0.3,r=0.1,b=0.3,l=0.1)),
              axis.title.x=element_blank(),
              axis.title.y=element_blank(),
              axis.line.x=element_line(colour="black"),
              axis.line.y=element_line(colour="black"),
              panel.grid.minor = element_blank(), 
              panel.border=element_blank(),
              panel.background=element_blank(),  
              legend.position=(c(0.9,0.9)),
              legend.title = element_blank(), 
              legend.key = element_blank()),
            list(i = i)))
          print(i)
          print(p1)
          myplots[[i]] <- p1 
          plot(p1)
        }

#Join the plots
panelplot=grid.arrange(plotlist = myplots, grobs = myplots, shared.legend=T)
库(dplyr)
图书馆(GG2)
图书馆(GG)
图书馆(E2)
图书馆(gridExtra)
#制作数据#

不幸的是,我无法再现你的例子。我可以建议添加一列,其中包含每个条的总和(我们将其命名为“条”)

所需的ggplot代码添加包括:

geom_text(aes(label = Bar), position = position_stack(vjust = 1)) +
可以使用vjust调整栏上方的文本高度