ggplot2:两个不同数据集的图例

时间:2014-02-04 11:47:28

标签: r ggplot2

我正在使用形状文件绘制带有ggplot的地图。然后我使用geom_line添加弧。弧根据其类型(单向或双向)着色,然后使用geom_point添加节点。节点根据其类型(原点,目的地,节点,停车场)进行着色。我想要两个不同的图例:一个用于节点类型,另一个用于弧类型。不幸的是,ggplot合并了传说并只产生了一个传奇。

这是代码(抱歉,我无法提供可行的示例。我无法发送形状文件):

cityplot <- ggplot(data = s_zurich, aes(x = long, y = lat, group = id), fill = "white") +
            geom_polygon(data = s_zurich, fill = "white") + 
            ylab("") + xlab("") + 
            theme(axis.text.x = element_blank(), axis.text.y = element_blank(), axis.ticks = element_blank())

cityplot_arcs <- cityplot + 
                 geom_line(data = allarcs, aes(x = X1, y = X2, group = Id, colour = Direction), size = 1) +
                 xlab("") + ylab("")

cityplot_arcs_nodes <- cityplot_arcs + geom_point(aes(x = lon, y = lat, colour = Type), shape = 15, size = 4, inherit.aes = FALSE, data = allnodes) + 
                       theme(legend.position = "none")

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是一种可行的解决方法。如果您可以geom_polygon填写aes()来自aes()电话 - 就像上面的情况一样,那么您可以使用填充的形状作为点(21是圆圈)并设置填充属性而不是mock_data<- data.frame(x=sample(1:10,20,T), y=sample(1:10,20,T), direction=sample(c("1way","2way"),20,T), type=sample(c("origin","destination","node","lot"),20,T)) ggplot(mock_data) + geom_polygon(aes(x=c(0,12,12,0),y=c(0,0,12,12),id=c(1,1,1,1)),fill="white") + geom_point(aes(x=x,y=y,fill=type),size=10,shape=21) + geom_line(aes(x=x,y=y,color=direction),size=2) + scale_fill_brewer(palette="Greens") + scale_color_brewer(palette="Set1") 调用中的颜色。见下文:

ggplot()

enter image description here

如果失败,您只能使用grid.arrange()绘制模拟图例,并使用{{1}}将其绘制在图表旁边减去默认图例。如果您需要帮助,请在评论中告诉我。