将垂直线(均值)的图例项添加到现有图例
Adding legend item for vertical line (mean) to already existing legend
我正在生成这样的密度图:
# Density Plot ZOOM with no legend title and mean lines
ggplot(comb, aes(x=values, fill = type)) +
geom_density(alpha = 0.3) +
scale_x_continuous(limits=c(9, 15), expand = c(0, 0)) +
xlab("Index Value") +
ylab("Density") +
ggtitle(expression('TI versus TI'[u])) +
theme(text = element_text(size=30),axis.text.x=element_text(angle=0,hjust=1,vjust=.9,size=20),
axis.text.y=element_text(angle=0,hjust=1,vjust=.8,size=20),
plot.title = element_text(size=40, face="bold", vjust=2),
axis.title.x=element_text(size=25,face="bold",vjust=-0.5,hjust=0.5),
axis.title.y=element_text(size=25,face="bold",vjust=1.5,hjust=0.5),
legend.position = c(.87,.90),
legend.text.align = 0) +
scale_fill_manual(values=c('red','blue'),
labels=c(expression('TI '),expression(TI[u]))) +
guides(fill=guide_legend(title=NULL)) +
geom_vline(data=mean, aes(xintercept=values.mean, colour=type),
linetype="dashed", size=1)
这几乎生成了我想要的情节:
但还有几件事我想做:
- 有平均线的图例项
- 改变图例项的顺序,使线条与适当的密度图例项(Ti,平均 TI,TIu,平均 TIu)分组
当我尝试使用 show_guide=T:
将线条添加到图例中时
geom_vline(data=mean, aes(xintercept=values.mean, colour=type),
线型="dashed", 尺寸=1, show_guide=T)
我明白了:
我该怎么做?
编辑: 使用彼得的回答,我得到了这个:
# Density Plot ZOOM with no legend title and mean lines - double legend
ggplot(comb, aes(x=values, fill = type)) +
geom_vline(data=mean, aes(xintercept=values.mean, colour=type),
linetype="dashed", size=1, show_guide=T) +
geom_density(alpha = 0.3) +
scale_x_continuous(limits=c(9, 15), expand = c(0, 0)) +
xlab("Index Value") +
ylab("Density") +
ggtitle(expression('TI versus TI'[u])) +
theme(text = element_text(size=30),axis.text.x=element_text(angle=0,hjust=1,vjust=.9,size=20),
axis.text.y=element_text(angle=0,hjust=1,vjust=.8,size=20),
plot.title = element_text(size=20,face="bold", vjust=1),
axis.title.x=element_text(size=15,face="bold",vjust=-0.5,hjust=0.5),
axis.title.y=element_text(size=15,face="bold",vjust=1.5,hjust=0.5),
legend.position = c(0.15, 0.90),
legend.text.align = 0,
legend.box = 'horizontal',
legend.margin = unit(45.0, 'line'),
legend.text=element_text(size=12,vjust=0,hjust=0)) +
scale_color_hue(labels=c(expression(bar(TI)),
expression(bar(TI[u])))) +
guides(color = guide_legend(title=NULL)) +
scale_fill_manual(values=c('red','blue'),
labels=c(expression(TI),
expression(TI[u]))) +
guides(fill = guide_legend(title=NULL, override.aes = list(linetype = 0)))
图表:
只有我希望能弄清楚的其他项目:
- 获取每个图例周围的缓冲区足以连接两者并使它们显示为一个
我认为您可以通过调整 legend.box
来获得您想要的结果
library(ggplot2)
data('diamonds')
plot_data <- subset(diamonds, cut %in% c("Ideal", "Premium"))
means <- aggregate( price ~ cut, plot_data, mean)
ggplot(plot_data, aes(x = price, fill = cut)) +
geom_density(alpha = 0.3) +
scale_x_continuous() +
geom_vline(data = means, aes(xintercept = price, color = cut), linetype = 2, show_guide = TRUE) +
scale_fill_manual(name = "",
values=c('red','blue'),
labels = c("Premium", "Ideal")) +
scale_color_hue(name = " ",
labels = c("Mean", "Mean")) +
theme(legend.box = 'horizontal',
legend.position = c(0.75, 0.75)) +
guides(fill = guide_legend(override.aes = list(linetype = 0)))
我正在生成这样的密度图:
# Density Plot ZOOM with no legend title and mean lines
ggplot(comb, aes(x=values, fill = type)) +
geom_density(alpha = 0.3) +
scale_x_continuous(limits=c(9, 15), expand = c(0, 0)) +
xlab("Index Value") +
ylab("Density") +
ggtitle(expression('TI versus TI'[u])) +
theme(text = element_text(size=30),axis.text.x=element_text(angle=0,hjust=1,vjust=.9,size=20),
axis.text.y=element_text(angle=0,hjust=1,vjust=.8,size=20),
plot.title = element_text(size=40, face="bold", vjust=2),
axis.title.x=element_text(size=25,face="bold",vjust=-0.5,hjust=0.5),
axis.title.y=element_text(size=25,face="bold",vjust=1.5,hjust=0.5),
legend.position = c(.87,.90),
legend.text.align = 0) +
scale_fill_manual(values=c('red','blue'),
labels=c(expression('TI '),expression(TI[u]))) +
guides(fill=guide_legend(title=NULL)) +
geom_vline(data=mean, aes(xintercept=values.mean, colour=type),
linetype="dashed", size=1)
这几乎生成了我想要的情节:
但还有几件事我想做:
- 有平均线的图例项
- 改变图例项的顺序,使线条与适当的密度图例项(Ti,平均 TI,TIu,平均 TIu)分组
当我尝试使用 show_guide=T:
将线条添加到图例中时geom_vline(data=mean, aes(xintercept=values.mean, colour=type), 线型="dashed", 尺寸=1, show_guide=T)
我明白了:
我该怎么做?
编辑: 使用彼得的回答,我得到了这个:
# Density Plot ZOOM with no legend title and mean lines - double legend
ggplot(comb, aes(x=values, fill = type)) +
geom_vline(data=mean, aes(xintercept=values.mean, colour=type),
linetype="dashed", size=1, show_guide=T) +
geom_density(alpha = 0.3) +
scale_x_continuous(limits=c(9, 15), expand = c(0, 0)) +
xlab("Index Value") +
ylab("Density") +
ggtitle(expression('TI versus TI'[u])) +
theme(text = element_text(size=30),axis.text.x=element_text(angle=0,hjust=1,vjust=.9,size=20),
axis.text.y=element_text(angle=0,hjust=1,vjust=.8,size=20),
plot.title = element_text(size=20,face="bold", vjust=1),
axis.title.x=element_text(size=15,face="bold",vjust=-0.5,hjust=0.5),
axis.title.y=element_text(size=15,face="bold",vjust=1.5,hjust=0.5),
legend.position = c(0.15, 0.90),
legend.text.align = 0,
legend.box = 'horizontal',
legend.margin = unit(45.0, 'line'),
legend.text=element_text(size=12,vjust=0,hjust=0)) +
scale_color_hue(labels=c(expression(bar(TI)),
expression(bar(TI[u])))) +
guides(color = guide_legend(title=NULL)) +
scale_fill_manual(values=c('red','blue'),
labels=c(expression(TI),
expression(TI[u]))) +
guides(fill = guide_legend(title=NULL, override.aes = list(linetype = 0)))
图表:
只有我希望能弄清楚的其他项目:
- 获取每个图例周围的缓冲区足以连接两者并使它们显示为一个
我认为您可以通过调整 legend.box
library(ggplot2)
data('diamonds')
plot_data <- subset(diamonds, cut %in% c("Ideal", "Premium"))
means <- aggregate( price ~ cut, plot_data, mean)
ggplot(plot_data, aes(x = price, fill = cut)) +
geom_density(alpha = 0.3) +
scale_x_continuous() +
geom_vline(data = means, aes(xintercept = price, color = cut), linetype = 2, show_guide = TRUE) +
scale_fill_manual(name = "",
values=c('red','blue'),
labels = c("Premium", "Ideal")) +
scale_color_hue(name = " ",
labels = c("Mean", "Mean")) +
theme(legend.box = 'horizontal',
legend.position = c(0.75, 0.75)) +
guides(fill = guide_legend(override.aes = list(linetype = 0)))