R 使用ggplot2添加额外图例信息

R 使用ggplot2添加额外图例信息,r,ggplot2,R,Ggplot2,我试图在这个堆叠的条形图中为图例添加额外的信息,但这些信息来自不同的数据帧。我想做的是添加一条图例线(在其他图例线下方),该图例线有一个实心点,文本为“记录的污染物值”。我试过各种各样的东西,但都没用。以下是我目前掌握的代码: library(ggplot2) columns <- unlist(lapply(1:4, function(x) rep(x,32))) labels <- c("SuperDeduper", "AdapterTrimmer", "QWindowTrim

我试图在这个堆叠的条形图中为图例添加额外的信息,但这些信息来自不同的数据帧。我想做的是添加一条图例线(在其他图例线下方),该图例线有一个实心点,文本为“记录的污染物值”。我试过各种各样的东西,但都没用。以下是我目前掌握的代码:

library(ggplot2)

columns <- unlist(lapply(1:4, function(x) rep(x,32)))
labels <- c("SuperDeduper", "AdapterTrimmer", "QWindowTrim", "Reads Remaining")
diffs <- c(35666631, 36774314, 36193131, 36140701, 41584694, 33888805, 
41314700, 36430192, 36164379, 37684733, 36156080, 33443533, 28441368, 
33025395, 31980771, 29354621, 29042522, 33575127, 34144001, 35359005, 
34037116, 34030228, 30695581, 27310435, 33448959, 39547820, 37183407, 
40013726, 35679976, 33506154, 31546743, 33917856, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49237692, 
50180374, 47276553, 48635427, 54147578, 39709279, 47969795, 44230737, 
52976902, 55651916, 55788100, 54082912, 50965229, 48481376, 54821029, 
55814879, 50763305, 54242897, 57001053, 54111642, 50922042, 55563781, 
48964424, 46377355, 46074343, 57514467, 51998501, 58061503, 55020584, 
54041618, 48210015, 55463206)

samps <- c("CHOR1", "CHOR10", "CHOR2", "CHOR3", "CHOR4", "CHOR5", "CHOR6", 
"CHOR7", "CHOR8", "CHOR9", "CPC1", "CPC10", "CPC11", "CPC2", 
"CPC3", "CPC4", "CPC5", "CPC6", "CPC7", "CPC8", "CPC9", "CPP1", 
"CPP2", "CPP3", "CPP4", "CPP5", "CPP6", "NB1", "NB2", "NB3", 
"NB4", "NB5", "CHOR1", "CHOR10", "CHOR2", "CHOR3", "CHOR4", "CHOR5", 
"CHOR6", "CHOR7", "CHOR8", "CHOR9", "CPC1", "CPC10", "CPC11", 
"CPC2", "CPC3", "CPC4", "CPC5", "CPC6", "CPC7", "CPC8", "CPC9", 
"CPP1", "CPP2", "CPP3", "CPP4", "CPP5", "CPP6", "NB1", "NB2", 
"NB3", "NB4", "NB5", "CHOR1", "CHOR10", "CHOR2", "CHOR3", "CHOR4", 
"CHOR5", "CHOR6", "CHOR7", "CHOR8", "CHOR9", "CPC1", "CPC10", 
"CPC11", "CPC2", "CPC3", "CPC4", "CPC5", "CPC6", "CPC7", "CPC8", 
"CPC9", "CPP1", "CPP2", "CPP3", "CPP4", "CPP5", "CPP6", "NB1", 
"NB2", "NB3", "NB4", "NB5", "CHOR1", "CHOR10", "CHOR2", "CHOR3", 
"CHOR4", "CHOR5", "CHOR6", "CHOR7", "CHOR8", "CHOR9", "CPC1", 
"CPC10", "CPC11", "CPC2", "CPC3", "CPC4", "CPC5", "CPC6", "CPC7", 
"CPC8", "CPC9", "CPP1", "CPP2", "CPP3", "CPP4", "CPP5", "CPP6", 
"NB1", "NB2", "NB3", "NB4", "NB5")

dffs <- structure(list(x = structure(1:32, .Label = c("CHOR1", "CHOR10", 
"CHOR2", "CHOR3", "CHOR4", "CHOR5", "CHOR6", "CHOR7", "CHOR8", 
"CHOR9", "CPC1", "CPC10", "CPC11", "CPC2", "CPC3", "CPC4", "CPC5", 
"CPC6", "CPC7", "CPC8", "CPC9", "CPP1", "CPP2", "CPP3", "CPP4", 
"CPP5", "CPP6", "NB1", "NB2", "NB3", "NB4", "NB5"), class = "factor"), 
    y = c(0.0544709955463634, 0.0596702158255113, 0.0586614896014222, 
    0.0624578654972305, 0.0627572173362813, 0.0652714546210198, 
    0.0720983861755616, 0.0721253780749289, 0.0663543751407387, 
    0.0550210025217426, 0.058055876946208, 0.0600278464411527, 
    0.0614602587742175, 0.0647506573410938, 0.044467464960404, 
    0.0463054497208508, 0.0540317062311753, 0.0623795178994235, 
    0.0609709990407159, 0.0660813707986263, 0.0564277955767876, 
    0.0657846664725093, 0.0702825464296669, 0.056445470816807, 
    0.0676118554533865, 0.06639558163306, 0.0850892537531267, 
    0.0593398767389062, 0.0896267454136998, 0.047540684416275, 
    0.101005522315739, 0.0840679762789124)), .Names = c("x", 
"y"), row.names = c(NA, -32L), class = "data.frame")


ggplot() + 
      geom_bar(data=data, aes(fill=columns, y=diffs, x=samps), stat="identity", position="fill") + 
      scale_fill_discrete(name="Preprocessing Steps\n(Dots are recorded\ncontaminant values)",labels=labels) +
      theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
      xlab("Samples") + ylab("Fractions of all reads") +
      geom_point(data=dffs, aes(x=x,y=y))
库(ggplot2)

列我不太清楚添加图例行是什么意思。你的意思是你想在图例中为与预处理步骤的关键点共存的点设置一个关键点吗

如果是这种情况,我建议将
geom_point()
颜色映射到一个变量,该变量可以存在于任何数据框之外

ggplot() + 
  geom_bar(aes(fill=columns, y=diffs, x=samps), stat="identity", position="fill") + 
  scale_fill_discrete(name="Preprocessing Steps",labels=labels,
                      # Order set to 1 to appear before dot
                      guide = guide_legend(order = 1)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  xlab("Samples") + ylab("Fractions of all reads") +
  # Add a colour mapping
  geom_point(data=dffs, aes(x=x,y=y, colour = "Recorded\nContaminant\nValues")) +
  # You can colour the dot how you like
  scale_colour_manual(values = "red", name = "")
这给了我以下的情节:


这接近你想要的吗?

主题外:
rep
每个
参数,你可以用它来创建
rep(1:4,每个=32)
是的,这正是我想要的。。。。但现在你伤害了我的大脑,因为我认为我多少了解美学,但显然我不懂。你介意再详细解释一下它是如何工作的吗?我似乎无法理解它。
aes()
函数是一个准旋转函数(请参阅)。本质上,如果传递了一个不带引号的名称,首先会尝试将该层的
data
参数上下文中的输入解释(计算)为列名。如果找不到该名称,则将搜索绘制到的环境,以查找与该名称匹配的内容。当它是一个文本字符串时,它被解释为一个应用于该层
数据
参数中所有行的因子。。。。这就像在数据框中添加另一列,所有列的值都相同。。。某种程度上。哇,要学的东西太多了。无论如何,谢谢!