R 多个柱状图的绘图图例绘制在每个柱状图的顶部

R 多个柱状图的绘图图例绘制在每个柱状图的顶部,r,ggplot2,histogram,legend,R,Ggplot2,Histogram,Legend,我已经在ggplot中绘制了这个多柱状图,现在我想为浅紫色部分和深紫色部分添加一个图例。我知道传统的方法是使用aes,但我似乎不知道如何将此功能集成到多重直方图图中 我不害怕体力劳动,但更复杂的解决方案是首选。有人帮我吗 #dataframe set.seed(20) df <- data.frame(expl = rbinom(n=100, size = 1, prob=0.08), resp = sample(50:100, size = 100, repla

我已经在ggplot中绘制了这个多柱状图,现在我想为浅紫色部分和深紫色部分添加一个图例。我知道传统的方法是使用aes,但我似乎不知道如何将此功能集成到多重直方图图中

我不害怕体力劳动,但更复杂的解决方案是首选。有人帮我吗

#dataframe
set.seed(20)
df <- data.frame(expl = rbinom(n=100, size = 1, prob=0.08),
             resp = sample(50:100, size = 100, replace  = T))

#graph
graph <- ggplot(data = df, aes(x = resp))

graph +
   geom_histogram(fill = "#BEBADA", alpha = 0.5, bins = 10) +
   geom_histogram(data = subset(df, expl == '1'), fill = "#BEBADA", bins = 10)
#数据帧
种子集(20)

df如果你想要一个alpha值的图例,你的想法是把它作为一种美学,而不是像你尝试的那样作为一个直接的论据。为此,一个简单的解决方案是丰富ggplot使用的数据框架:

df2 <- rbind(
  cbind(df, filter="all lines"), 
  cbind(subset(df, expl == '1'), filter="expl==1") 
  )

您的数据已经是非常适合
ggplot
的长格式;您只需将
expl
映射到alpha即可。一般来说,如果您发现自己对同一个geom进行了多次复制,您可能需要重新考虑数据的形状或将其输入geom的方法

库(tidyverse)
种子集(20)

df感谢camille提供的优雅解决方案和解释。我选择alpha来区分,因为在不同的图中,我使用紫色#bebada来表示特定的亚群体。为了让读者更容易理解演示文稿,我想使用完全相同的配色方案,这在使用Alpha进行区分时是可能的,不过还有一个问题。使用此脚本,我似乎无法调整图例标题和标签。除了脚本之外,我还使用了scale\u fill\u discrete(name=“Legend”,labels=c(“条件1”,“条件2”),但R只是像您描述的那样返回原始图形。您知道解决方法吗?没关系,我已经计算出并编辑了您的答案。我不知道如何更改您发送的图像
ggplot(df2, aes(resp, alpha=filter)) + 
  geom_histogram(fill="#BEBADA", bins=10, position="identity") +
  scale_alpha_discrete(range=c(.5,1))