r - 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)
所以这是生成的图表,但没有图例。
有人能帮我吗?谢谢!
解决方案
试试这个方法。关键是玩弄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'))
输出:
推荐阅读
- laravel - Laravel:如何将集合传递给查看?
- javascript - 如何在 Angular 11 中调用 Javascript 函数
- linq - EF Core,在任何条件下附加到谓词生成器
- windows - 永久关闭 Windows 10 Defender 防病毒软件,因为它给 android studio 带来了问题
- arrays - 在 C 中将值输入到 typedef char 数组时出现问题
- amazon-web-services - AWS Green/Blue Static Deploy off S3 白皮书似乎不可能
- vulkan - 不使用基于推送常量的顶点属性
- python - 我需要帮助将列表循环在一起
- ios - 在 ios 设备中向下拖动屏幕将整个屏幕向下拖动
- django - Django - 从模型中自动化 CRUD(DRY 方法)?