首页 > 解决方案 > ggplot中的多直方图中的图例没有出现

问题描述

我从 3 个随机生成的向量生成直方图,然后生成一个连接向量的数据框,并为每个向量添加一个键(“a”、“b”和“c”),但图中未显示图例。

SAg_exp = rexp(cenarios,1/lambda)
SAg_unif= runif(cenarios,0,1)
normal= rnorm(cenarios,0,1)
dat <- data.frame(xx = c(SAg_exp,SAg_unif,normal),yy = rep(letters[1:3],each = cenarios))
graph = ggplot(dat, aes(x=xx)) + 
  geom_histogram(data=subset(dat,yy == 'a'),fill = "red",aes(fill=yy),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'b'),fill = "blue",aes(fill=yy),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'c'),fill = "green",aes(fill=yy),alpha = 0.2) +
  ggtitle(paste("Histograma SAg:",tamanho,"apólices vs.",cenarios,"cenários")) + 
  ylab("Frequência") + xlab("SAg") +
  scale_fill_manual(name="yy",values=c("a","b","c"),labels=c("Exponencial","Uniforme","Normal"))
print(graph)

所以这是生成的图表,但没有图例。

在此处输入图像描述

有人能帮我吗?谢谢!

标签: rggplot2

解决方案


试试这个方法。关键是玩弄aes()这个fill论点。之后,scale_fill_manual()像您一样使用允许在图例中格式化颜色和标签。这里的代码对您的解决方案略有改动:

library(ggplot2)
library(dplyr)
library(tidyr)
#Data
cenarios <- 100
lambda <- 0.8
SAg_exp = rexp(cenarios,1/lambda)
SAg_unif= runif(cenarios,0,1)
normal= rnorm(cenarios,0,1)
dat <- data.frame(xx = c(SAg_exp,SAg_unif,normal),yy = rep(letters[1:3],each = cenarios))
#Plot
graph <- ggplot(dat, aes(x=xx,group=yy,fill=yy)) +
  geom_histogram(data=subset(dat,yy == 'a'),aes(fill='a'),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'b'),aes(fill = "b"),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'c'),aes(fill="c"),alpha = 0.2) +
  ggtitle(paste("Histograma SAg:","apólices vs.",cenarios,"cenários")) + 
  ylab("Frequência") + xlab("SAg") +
  scale_fill_manual(name="yy",
                    labels=c("a"="Exponencial","b"="Uniforme","c"="Normal"),
                    values=c('red','blue','green'))

输出:

在此处输入图像描述

为了更改图例中的标题名称,您可以像这样调整name选项scale_fill_manual()

#Plot 2
graph <- ggplot(dat, aes(x=xx,group=yy,fill=yy)) +
  geom_histogram(data=subset(dat,yy == 'a'),aes(fill='a'),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'b'),aes(fill = "b"),alpha = 0.2) +
  geom_histogram(data=subset(dat,yy == 'c'),aes(fill="c"),alpha = 0.2) +
  ggtitle(paste("Histograma SAg:","apólices vs.",cenarios,"cenários")) + 
  ylab("Frequência") + xlab("SAg") +
  scale_fill_manual(name="Variable",
                    labels=c("a"="Exponencial","b"="Uniforme","c"="Normal"),
                    values=c('red','blue','green'))

输出:

在此处输入图像描述


推荐阅读