R ggplot2、堆叠直方图和摘要标签

R ggplot2、堆叠直方图和摘要标签,r,ggplot2,label,stacked,geom-bar,R,Ggplot2,Label,Stacked,Geom Bar,我试图获取发生在4个位置(1、2、3、4-下面)的事件数据(A、B、C和D-下面)。我想将它们绘制为一个堆叠的条形图,填充以显示每个事件(a、B、C、D)对该位置的贡献,并显示这些贡献的整数值。我想看到的不仅是个人价值观(如下所述),我还想看到总体贡献——我不知道该怎么做 因此有两个问题: 1:不仅打印堆叠条的单个值,而且(甚至单独/仅)打印顶部的总值。 2:文本标签以其值的y偏移量打印,因此它们会相互覆盖,并且不会在条内对齐。我更喜欢在子栏中预期的位置,例如中间或顶部 a <- c(1,

我试图获取发生在4个位置(1、2、3、4-下面)的事件数据(A、B、C和D-下面)。我想将它们绘制为一个堆叠的条形图,填充以显示每个事件(a、B、C、D)对该位置的贡献,并显示这些贡献的整数值。我想看到的不仅是个人价值观(如下所述),我还想看到总体贡献——我不知道该怎么做

因此有两个问题: 1:不仅打印堆叠条的单个值,而且(甚至单独/仅)打印顶部的总值。 2:文本标签以其值的y偏移量打印,因此它们会相互覆盖,并且不会在条内对齐。我更喜欢在子栏中预期的位置,例如中间或顶部

a <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,2)
b <- c('A','B','C','D','A','A','B','C','B','B','C','C','C','D','D','A','A','B','C','D')
df <- data.frame(a, b)
现在回到使用ggplot打印的data.frame:

df2 <- data.frame(table(df$a, df$b))
我非常感谢你的帮助。我是否不需要通过一个表来整理我的数据框,以对其进行汇总,然后再返回到一个数据框中?我可以在吧台的总高度处打印标签吗

我觉得如果我不使用填充,我就可以达到..计数。。值,但stat=“bin”,但由于我已经转到stat=“identity”,我似乎无法获得该摘要值


谢谢

好的,首先让我们得到一些合理的名称,因为当文本总是谈论“事件”和“位置”时,而变量名是
a
b
,很容易混淆。此外,由于您的位置是分类的,我们将确保它们被编码为一个因素

a <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,2)
b <- c('A','B','C','D','A','A','B','C','B','B','C','C','C','D','D','A','A','B','C','D')
df <- data.frame(a, b)
names(df) <- c("location", "event")
df$location <- factor(df$location)
我认为我们确实需要进行总结,以获得总数:

library(dplyr)
totes <- df %.% group_by(location) %.% summarize(total = n())

ggplot(df, aes(x = location)) + geom_bar(aes(fill = event)) +
    geom_text(data = totes,
              mapping = aes(y = total + .2, label = total))
库(dplyr)

我会像你一样总结数据,以生成你想要的图。至于标签,您还需要创建变量来定义标签在图形上的放置位置

a <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,2)
b <- c('A','B','C','D','A','A','B','C','B','B','C','C','C','D','D','A','A','B','C','D')
df <- data.frame(a, b)
df2 <- data.frame(table(df$a, df$b))

您可以更改标签的大小、颜色、位置等,以使图表看起来更美观。

可能会有所帮助,谢谢。我将进一步了解dplyr软件包。谢谢我和你一样关注如何可视化数据和堆叠数据的可疑价值。然而,在我看来,直线似乎意味着x轴数据点(或本例中的位置)之间的某种连接。点之间的斜率似乎说明了一个变化,一个在本例中并不存在的三角形。也许躲闪酒吧会更好。嗯,谢谢你的主意。@Ullapool使用闪避条,你可以在每个位置将总数绘制成一条水平线段。谢谢你在我的答案中找出了空白!
library(ggplot2)
ggplot(df, aes(x = location, fill = event)) + geom_bar()
library(dplyr)
totes <- df %.% group_by(location) %.% summarize(total = n())

ggplot(df, aes(x = location)) + geom_bar(aes(fill = event)) +
    geom_text(data = totes,
              mapping = aes(y = total + .2, label = total))
df.counts <- df %.% group_by(location, event) %.% summarize(n = n())

ggplot(totes, aes(x = location, y = total)) +
    geom_line(aes(group = 1), size = 1) +
    geom_line(data = df.counts, aes(y = n, color = event, group = event), size = 0.9,
              position = position_jitter(w = 0.05, h = 0.1)) +
    # jitter not pictured, but it helps with the overlapping lines
    expand_limits(y = 0) +
    annotate(geom = "text", x = 2, y = 6, label = "Total", size = 10)
a <- c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,1,1,1,2)
b <- c('A','B','C','D','A','A','B','C','B','B','C','C','C','D','D','A','A','B','C','D')
df <- data.frame(a, b)
df2 <- data.frame(table(df$a, df$b))
df2$overall <- NA
df2$overall[1:length(unique(df2$Var1))] <- xtabs(Freq~Var1,data=df2)
library(plyr)
df2 <- ddply(df2, "Var1", transform, cumvars=cumsum(Freq))
# Remove Zeros from printing on labels
df2$Freq2 <- ifelse(df2$Freq==0,NA,df2$Freq)


library(ggplot2)

ggplot(df2, aes(x=Var1, y=Freq, fill=Var2, label=Freq)) + 
  geom_bar(stat="identity") + 
  geom_text(aes(x=Var1, y=overall, label=overall),vjust=-.2,stat="identity") + 
  geom_text(aes(x=Var1, y=cumvars, label=Freq2),vjust=1.5, colour="white", stat="identity")