ggplot2 ggmap, редактирование легенды R

Вот
пример кода:

require(rgdal)
require(ggmap)
require(maptools)
library(RColorBrewer)



polska <- get_map(

  location=c(lon=20.9589934, lat=53.5149404), 
  zoom=7, 
  maptype="roadmap" 

)

mapa <- ggmap(polska)

nazwa <- c('LEKARZ - SPECJALISTA ONKOLOGII I HEMATOLOGII DZIECIĘCEJ',
           'LEKARZ - SPECJALISTA ONKOLOGII KLINICZNEJ',
           'LEKARZ - SPECJALISTA RADIOLOGII I DIAGNOSTYKI OBRAZOWEJ',
           'LEKARZ - SPECJALISTA RADIOTERAPII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA KARDIOCHIRURGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII DZIECIĘCEJ',
           'LEKARZ - RADIOLOGIA I DIAGNOSTYKA OBRAZOWA',
           'LEKARZ - SPECJALISTA CHIRURGII ONKOLOGICZNEJ',
           'LEKARZ - SPECJALISTA GINEKOLOGII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA ONKOLOGII I HEMATOLOGII DZIECIĘCEJ',
           'LEKARZ - SPECJALISTA ONKOLOGII KLINICZNEJ',
           'LEKARZ - SPECJALISTA RADIOLOGII I DIAGNOSTYKI OBRAZOWEJ',
           'LEKARZ - SPECJALISTA RADIOTERAPII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA KARDIOCHIRURGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII DZIECIĘCEJ',
           'LEKARZ - RADIOLOGIA I DIAGNOSTYKA OBRAZOWA',
           'LEKARZ - SPECJALISTA CHIRURGII ONKOLOGICZNEJ',
           'LEKARZ - SPECJALISTA GINEKOLOGII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA ONKOLOGII I HEMATOLOGII DZIECIĘCEJ',
           'LEKARZ - SPECJALISTA ONKOLOGII KLINICZNEJ',
           'LEKARZ - SPECJALISTA RADIOLOGII I DIAGNOSTYKI OBRAZOWEJ',
           'LEKARZ - SPECJALISTA RADIOTERAPII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA KARDIOCHIRURGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII DZIECIĘCEJ',
           'LEKARZ - RADIOLOGIA I DIAGNOSTYKA OBRAZOWA',
           'LEKARZ - SPECJALISTA CHIRURGII ONKOLOGICZNEJ',
           'LEKARZ - SPECJALISTA GINEKOLOGII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA ONKOLOGII I HEMATOLOGII DZIECIĘCEJ',
           'LEKARZ - SPECJALISTA ONKOLOGII KLINICZNEJ',
           'LEKARZ - SPECJALISTA RADIOLOGII I DIAGNOSTYKI OBRAZOWEJ',
           'LEKARZ - SPECJALISTA RADIOTERAPII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA KARDIOCHIRURGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII DZIECIĘCEJ',
           'LEKARZ - RADIOLOGIA I DIAGNOSTYKA OBRAZOWA',
           'LEKARZ - SPECJALISTA CHIRURGII ONKOLOGICZNEJ',
           'LEKARZ - SPECJALISTA GINEKOLOGII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA ONKOLOGII I HEMATOLOGII DZIECIĘCEJ',
           'LEKARZ - SPECJALISTA ONKOLOGII KLINICZNEJ',
           'LEKARZ - SPECJALISTA RADIOLOGII I DIAGNOSTYKI OBRAZOWEJ',
           'LEKARZ - SPECJALISTA RADIOTERAPII ONKOLOGICZNEJ','LEKARZ - SPECJALISTA KARDIOCHIRURGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII',
           'LEKARZ - SPECJALISTA KARDIOLOGII DZIECIĘCEJ',
           'LEKARZ - RADIOLOGIA I DIAGNOSTYKA OBRAZOWA',
           'LEKARZ - SPECJALISTA CHIRURGII ONKOLOGICZNEJ')

Lat <- c(53.772908,         54.179697,         53.77253,         53.769866,         53.824712,         53.770479,         54.155989,         53.77253,         53.900444,
         53.769866,         53.769866,         53.784476,         53.776881,         51.765548,         53.770238,         53.626192,         54.179697,         54.155989,         53.770238,         54.179697,       54.161008,         53.241782,
         53.693514,         54.497984,         54.179697,         53.770238,         54.179697,         54.12597,         53.793636,         53.769866,
         53.77253,         53.813859,         54.082334,         53.769866,         54.179697,         54.153899,        53.693514,
         53.769866,         54.179697,         51.765548,         53.820852,         53.144716,         53.586071,         53.144716,         53.793636,
         53.424625,         53.241782,         53.769866,         53.557383)


Lon <- c(20.484436,
         19.429063,         20.471922,         20.492113,         22.3542,         20.477155,         19.425851,         20.471922,         20.573356,         20.492113,         20.492113,         20.494275,
         20.505175,         19.455863,         20.479557,         21.798478,         19.429063,         19.425851,         20.479557,         19.429063,         19.418135,
         20.192547,         19.975791,         18.544899,         19.429063,         20.479557,         19.429063,
         20.591212,         22.33971,         20.492113,         20.471922,         22.384305,         21.377269,       20.492113,
         19.429063,         19.423336,         19.975791,         20.492113,         19.429063,         19.455863,         22.364016,         23.191729,         19.566362,         23.191729,         22.33971,         19.587424,         20.192547,
         20.492113,         20.986225
)
personel <- data.frame(nazwa,Lat,Lon)

moja.paleta <- brewer.pal(10, "Set3")
personel$kolor <- moja.paleta[personel$nazwa]

punkty <- mapa+ geom_point( aes(x=Lon, y=Lat,fill=personel$kolor)
                               ,data=subset(personel,nazwa=nazwa)#& dziedzina=='onkologia'))
                              ,size=6
                              , color= "gold"
                              , pch=21

                              ) 

plot(punkty)

Мой вопрос:

Как изменить названия меток направляющих с этих названий цветов с moja.paleta на personel$nazwa Также как изменить размер меток легенды и сделать эту легенду вертикальной, а не горизонтальной?

ИЗОБРАЖЕНИЕ

введите здесь описание изображения


person banshe    schedule 24.02.2016    source источник
comment
Этот сайт работает лучше всего, когда вы задаете один вопрос за раз, так как может быть принят только один ответ. Вы должны попытаться включить образцы данных в сам вопрос, а не требовать загрузки с другого сайта. См. советы по созданию воспроизводимого примера. Мы здесь не для того, чтобы писать код для вас, мы здесь, чтобы помочь.   -  person MrFlick    schedule 24.02.2016


Ответы (2)


я думаю это должно сработать

moja.paleta <- brewer.pal(10, "Set3")
mapa + geom_point( aes(x=Lon, y=Lat,fill=nazwa),
   data=subset(personel,nazwa=nazwa)#& dziedzina=='onkologia')),
   size=6,
   color= "gold",
   pch=21) + 
   scale_fill_manual( values=setNames(moja.paleta,levels(personel$nazwa)) ) + 
   guides(fill  = guide_legend(ncol = 2)) + 
   theme(legend.position="bottom")

Мы используем scale_fill_manual для установки цветов для каждого из уровней и используем эстетику fill= для окрашивания точек (обратите внимание, что здесь нет $ — вы должны избегать этого при указании эстетики.

Также я переместил направляющие вниз и изменил количество столбцов. И, наконец, мне пришлось выбрать пивоваренную палитру другого цвета, потому что у «Блюза» не было 10 значений.

введите здесь описание изображения

person MrFlick    schedule 24.02.2016
comment
большое спасибо за помощь, еще один вопрос, если возможно, если я добавлю еще один столбец с какой-либо другой переменной, можно ли добавить разные формы для точек (используя эту переменную?) - person banshe; 25.02.2016
comment
Да. Для этого есть эстетика формы (aes(shape=)) - person MrFlick; 25.02.2016
comment
И можно ли использовать только фигуры из pch=21:25? я верю, что это единственные формы, которые можно раскрасить. mapa + geom_point( aes(x=Lon, y=Lat,fill=nazwa, SHAPE= DZIEDZINA), data=subset(personel,nazwa=nazwa), size=6, color= "gold", #pch=21 ) что-то подобное будет работать? и где добавить те формы точек, которые я хочу использовать? - person banshe; 25.02.2016
comment
Это становится немного не по теме. Если у вас есть отдельный вопрос о том, как ggplot2 обрабатывает фигуры, я рекомендую поискать другие решения или открыть новый вопрос. - person MrFlick; 25.02.2016

Все, что работает в ggplot, применимо и к ggmap. Так, например, эта веб-страница должна ответить на большинство ваших вопросов: http://www.cookbook-r.com/Graphs/Legends_%28ggplot2%29/

Поскольку вы не приводите никаких примеров данных, я не могу проверить, работает ли это:

изменить имена каждого элемента легенды:

+ scale_fill_manual(labels=c("a", "b", "c")) 

Изменить метки легенды размера, изменить положение легенды

+ theme(legend.text = element_text(size = 16),
        legend.position="bottom")   #or top or so
person Wave    schedule 24.02.2016
comment
Я отредактировал свой пост, теперь он с примерами данных. ;) я попробую ваш код, спасибо - я не пробовал с ручными метками ... Я попытался составить список с моим персональным именем $, а затем каким-то образом поместил его в легенду. - person banshe; 24.02.2016
comment
вы можете сделать labels=unlist(your.list) или вы можете просто изменить имена в кадре данных, поэтому вам не нужно беспокоиться об их изменении на графике - person Wave; 24.02.2016