2014-02-04 3 views
0

Я рисую карту с ggplot, используя файл формы. Затем я добавляю дуги, используя geom_line. Дуги окрашены в соответствии с их типом (oneway или twoway), а затем я добавляю узлы с помощью geom_point. Узлы окрашены в соответствии с их типом (Origin, Destination, Node, Parking lot). Я хочу иметь две разные легенды: один для типов узлов и один для типов дуги. К сожалению, ggplot объединяет легенды и создает только одну легенду.ggplot2: легенда о двух разных наборах данных

Вот код (жаль, что я не могу предоставить работоспособный пример, который я не могу отправить файлы формы.):

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") 

Любая помощь будет оценена.

+3

Уход за вашей воспроизводимой проблемой? У нас нет доступа к вашим данным. –

+0

Действительно, возможность работать с кодом в нашей собственной сессии поможет. Я полагаю, что вы прочитали файл справки ['guide'] (http://docs.ggplot2.org/0.9.3.1/guides.html)? С другой стороны, я помню кое-что, что может быть только одна цветовая шкала (или легенда, я не уверен) в одном ggplot. –

ответ

1

Вот возможное обходное решение. Если вы можете сохранить свой geom_polygon, заполните aes() - как выглядит выше, вы можете использовать заполненную форму для точки (21 - это круг) и установить атрибут fill, а не цвет в вызове aes() , Смотрите ниже:

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") 

enter image description here

В противном случае, вы можете построить макет легенду только с помощью ggplot() и использовать grid.arrange(), чтобы построить его рядом с графиком минус легенды по умолчанию. Дайте мне знать в комментариях, если вам нужна помощь в этом.

Смежные вопросы