繁体   English   中英

Position 使用来自 ggplot2 的 geom_bar 将身份数据样本大小作为 geom_text 直接放在条形图上

[英]Position stacked identity data sample size as geom_text directly over a bar using geom_bar from ggplot2

在这个实验中,我们追踪了我们的受试者动物是否存在细菌感染。 我们能够分离出动物体内存在哪种类型的细菌,并创建了一个 plot,其 X 轴为实验开始后的一周,Y 轴为细菌感染阳性动物的百分比。 这是一个堆叠的身份 ggplot,其中每个 geom_bar 包含每周感染动物体内的不同细菌身份。 这是一个带有相应 ggplot 代码和结果的示例数据集:

DummyData <- data.frame(matrix(ncol = 5, nrow = 78))

colnames(DummyData) <- c('WeeksSinceStart','BacteriaType','PositiveOccurences','SampleSize','NewSampleSize')

DummyData$WeeksSinceStart <- c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,9,9,9,9,9,10,10,10,10)

DummyData$BacteriaType <- c("BactA","BactB","BactD","BactB","BactE","BactA","BactS","BactF","BactE","BactH","BactJ","BactK","BactE","BactB","BactS","BactF","BactL","BactE","BactW","BactH","BactS","BactJ","BactQ","BactN","BactW","BactA","BactD","BactE","BactA","BactC","BactD","BactK","BactL","BactE","BactD","BactA","BactS","BactK","BactB","BactE","BactF","BactH","BactN","BactE","BactL","BactZ","BactE","BactC","BactR","BactD","BactJ","BactN","BactK","BactW","BactR","BactE","BactW","BactA","BactM","BactG","BactO","BactI","BactE","BactD","BactM","BactH","BactC","BactM","BactW","BactA","BactL","BactB","BactE","BactA","BactS","BactH","BactQ","BactF")

PosOcc <- seq(from = 1, to = 2, by = 1)
DummyData$PositiveOccurences <- rep(PosOcc, times = 13)

DummyData$SampleSize <- c(78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,29,29,29,29,29,10,10,10,10)


DummyData$NewSampleSize <- c(78,NA,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,NA,NA,78,NA,NA,NA,NA,NA,NA,29,NA,NA,NA,NA,10,NA,NA,NA)


numcolor <- 20
plotcolors <- colorRampPalette(brewer.pal(8, "Set3"))(numcolor)

#GGplot for Dummy Data
DummyDataPlot <- ggplot(DummyData, aes(x = WeeksSinceStart, y = PositiveOccurences/SampleSize, fill = BacteriaType)) + geom_bar(position = "stack", stat = "identity") +
geom_text(label = DummyData$NewSampleSize, nudge_y = 0.1) +
  
scale_y_continuous(limits = c(0,0.6), breaks = seq(0, 1, by = 0.1)) + scale_x_continuous(limits = c(0.5,11), breaks = seq(0,10, by =1)) +  
  labs(
  x = "Weeks Since Start",
  y = "Proportion Positive") +
scale_fill_manual(values = plotcolors) 

虚拟数据的 ggplot

问题:我似乎无法在每个栏上直接找到 position 来自 geom_text 的标签。 我还想直接在每个条上将文本“n =”添加到样本大小值。 谢谢您的帮助!

我为 position_dodge 语句和 nudge_y 语句尝试了不同的值,但没有成功。

有时最简单的方法是进行一些数据整理,即一种选择是为您的标签创建一个单独的 dataframe:

library(ggplot2)
library(dplyr)

dat_label <- DummyData |> 
  group_by(WeeksSinceStart) |> 
  summarise(y = sum(PositiveOccurences / SampleSize), SampleSize = unique(SampleSize))

ggplot(DummyData, aes(x = WeeksSinceStart, y = PositiveOccurences / SampleSize, fill = BacteriaType)) +
  geom_bar(position = "stack", stat = "identity") +
  geom_text(data = dat_label, aes(x = WeeksSinceStart, y = y, label = SampleSize), inherit.aes = FALSE, nudge_y = .01) +
  #scale_y_continuous(limits = c(0, 0.6), breaks = seq(0, 1, by = 0.1)) +
  scale_x_continuous(limits = c(0.5, 11), breaks = seq(0, 10, by = 1)) +
  labs(
    x = "Weeks Since Start",
    y = "Proportion Positive"
  ) +
  scale_fill_manual(values = plotcolors)

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM