首页 > 解决方案 > 如何跨两种不同类型的geom ggplot2创建图例

问题描述

我有两个不同的数据集,我想在同一个 ggplot2 图中绘制它们,每个数据集使用不同的几何图形。理想情况下,我还想要一个图例,表明点几何对应于一种数据,而线几何对应于另一种数据,但我不知道该怎么做。下面是我的数据基本上看起来的示例,减去图例。

require(ggplot2)

set.seed(1)

d1 = data.frame(y_values = rnorm(21), x_values = 1:21, factor_values = as.factor(sample(1:3, 21, replace=T)))
d2 = data.frame(y_values = seq(-1,1,by = .05), x_values = seq(1,21,by = .5))



ggplot() + 
geom_point(data=d1, aes(x=x_values, y=y_values, color=factor_values)) + 
geom_line(data=d2, aes(x = x_values, y=y_values), color="blue")

标签: rggplot2

解决方案


也许这就是你想要的?每个数据有两个图例。您可以启用linetype以创建新图例,以便点和线可以位于不同的位置:

#Code
ggplot() + 
  geom_point(data=d1, aes(x=x_values, y=y_values, color=factor_values)) + 
  geom_line(data=d2, aes(x = x_values, y=y_values,linetype='myline'), color="blue")+
  scale_linetype_manual('My line',values='solid')

输出:

在此处输入图像描述

或者你也可以试试这个:

#Code 2
ggplot() + 
  geom_point(data=d1, aes(x=x_values, y=y_values, color=factor_values)) + 
  geom_line(data=d2, aes(x = x_values, y=y_values,linetype='myline'), color="blue")+
  scale_linetype_manual('',values='solid')+
  theme(
    legend.spacing = unit(-17,'pt'),
    legend.margin = margin(t=0,b=0,unit='pt'),
    legend.background = element_blank()
  )+guides(linetype=guide_legend(title="New Legend Title"),
         color=guide_legend(title=""))

输出:

在此处输入图像描述


推荐阅读