2016-03-31 5 views
1

У меня есть ядро ​​dataframe с идентификатором пользователя, широтой, долготой, мб. Я хотел построить карту с точками, пропорциональными используемому МБ. Мне нужна форма пончика в geom_point, поэтому я подумал, что могу использовать два pch = 20 с различными размерами, чтобы получить форму пончика из pch. Но я столкнулся с некоторыми проблемами.ggplot2/ggmap: используйте двухцветные маркеры точки как в сюжете, так и в легенде

m <- get_map(location=c(lon=median(samp$longitude),lat=median(samp$latitude)), zoom=10) 
print(ggmap(m) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="orange", pch = 20, data=samp) + 
     geom_point(aes(x=longitude, y=latitude, size= mb.user), colour="black", pch = 20, size = 4, data=samp)) 

, но я получаю что-то вроде,

enter image description here

Формы даже не по всей карте. Я хочу, чтобы фигуры были четными и пропорциональными значениям mb.user. Но карта здесь не пропорциональна mb.user или размерам.

Также в легенде также показан только один цвет. Он не показывает два цвета вместе. Я в идеале хочу иметь символ в форме пончика, размер которого пропорционален mb.user.

Может кто-нибудь помочь мне в обнаружении ошибки, которую я здесь делаю?

Благодаря

ответ

1

Если вы используете форму точки, которая имеет границу, вы можете построить точки только один раз, и он будет отображаться правильно в легенде. Если у вас установлена ​​версия ggplot2 версии 2 (последняя версия 2.1.0 на момент написания этой статьи), вы также можете управлять шириной границы точки с помощью параметра stroke. Вы не дали воспроизводимый пример, так вот пример использования встроенного фрейма mtcars данных:

ggplot(mtcars, aes(wt, mpg)) + 
    geom_point(aes(size=mpg), colour="red", fill="black", shape=21, stroke=1.5) + 
    scale_size_area(max_size=4) 

shape=21 является заполненным кругом с границей (см ?pch для доступных форм). colour устанавливает цвет границы, fill устанавливает цвет заливки, а stroke устанавливает ширину рамки.

enter image description here

Что касается исходного кода, черные круги одинакового размера, потому что вы переопределены size=mb.user также путем установки size=4 вне вызова aes. Вы не можете видеть некоторые оранжевые точки в тех случаях, когда черные точки больше оранжевых точек. Если вы удалите size=4 и сделаете size=0.3*mb.user внутри aes, вы получите правильно масштабированные черные точки внутри масштабированных оранжевых точек.

Однако это еще не решит проблему с легендой. Я не думаю, что есть способ получить легенду с черными внутренними оранжевыми точками, используя два отдельных обращения к geom_point, так как нет никакого способа (по крайней мере, ничто из того, что я могу думать) создать комбинированное сопоставление размера и цвета, чтобы сделать это , Использование одного звонка geom_point с заполненным маркером решает проблему, но я подумал, что попытаюсь объяснить, насколько мог, почему ваш исходный код не работал так, как вы ожидали.