Пользовательская легенда для пузырьковой диаграммы с использованием ggplot

У меня есть фрейм данных, который содержит пространственную переменную с смоделированными и наблюдаемыми значениями.

df <- data.frame(sim = sample((20:30),10),
                 obs = sample(25:40,10),
                 long = rnorm(10,10,8),
                 lat = rnorm(10,30,15))

Я построил пространственный пузырьковый график, используя следующий код.

ggplot() +
geom_polygon(data = shp, aes(x = long, y = lat, group = group),
             col = "black", lwd = 0.8, fill = "slategray1",
             alpha = 0.5) +
coord_cartesian() + 
geom_point(data = df, aes(x = long, y = lat, group = sim, size = sim), col = "red", alpha = 0.5) +
geom_point(data = df, aes(x = long, y = lat, group = obs, size = obs), col = "blue", alpha = 0.5) +
scale_size_continuous(range = c(10,20)) +
coord_map(xlim = c(-1, 22), ylim = c(10, 45))

Результат выполнения приведенного выше кода показан на картинке. На графике я хочу показать разницу между смоделированными и наблюдаемыми данными, которая сделана идеально. Теперь я хочу показать две разные легенды для двух переменных sim и obs, которые будут иметь красный и синий цвета соответственно. Также я хочу показать величину переменной в легенде, но не как пузырьки переменного размера, а как-то иначе. Что-то вроде данного здесь < / а>. Может ли кто-нибудь помочь мне в этом?

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


person Pulsar_534511    schedule 06.04.2018    source источник
comment
Вы можете иметь легенду одного цвета и легенду одного размера. Вы не можете легко получить две легенды размера (по одной для каждого цвета).   -  person Axeman    schedule 06.04.2018
comment
Кроме того, i) у вас не может быть двух систем координат, ii) group в geom_point ничего не делает, iii) вы, вероятно, захотите масштабировать размер по площади (scale_size_area)   -  person Axeman    schedule 06.04.2018


Ответы (1)


Можно ли оставить размер пузыря таким, какой он есть?

    df<-data.frame(sim=sample((20:30),10),obs=sample(25:40,10),long=rnorm(10,10,8),lat=rnorm(10,30,15))
shp <- df %>%
  gather(group, value, -long, -lat)

ggplot()+
  geom_polygon(data = df, aes(x = long, y = lat),col="black",lwd=0.8,fill="slategray1",alpha=0.5)+
  coord_cartesian()+
  geom_point(data=shp,aes(x=long,y=lat,group=group,size=value, fill = group, color = group),alpha=0.5)

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

Объяснение

Чтобы получить разные цвета для групп, соберите obs и sim в один столбец и укажите этот столбец как эстетический цвет. blue и red - цвета по умолчанию, которые ggplot2 назначаются для переменных с двумя уровнями. Поэтому я удалил один geom_point и вместо оставшихся geom_point использовал длинную форму ваших данных.

person hpesoj626    schedule 06.04.2018
comment
Я думаю, вы не хотите использовать shp для рисования многоугольника. Ваш shp предназначен для geom_poin(). Поскольку данных для полигонов нет, я думаю, все, что вы можете сделать, это оставить график с точками данных. - person jazzurro; 06.04.2018
comment
Спасибо за ответ, но я не хочу идти на компромисс с размером. На самом деле я хочу, чтобы в вашем ответе была только верхняя легенда, то есть два цвета для obs и sim. Не могли бы вы рассказать мне, как вы это получили? - person Pulsar_534511; 06.04.2018
comment
@ Pulsar_534511, пояснение добавил. На самом деле это поведение по умолчанию ggplot2 - person hpesoj626; 06.04.2018
comment
хорошо, я не знал о функции "собрать"! Теперь я понимаю, как у вас получилось, но все же это не то, что мне нужно. - person Pulsar_534511; 06.04.2018
comment
@ Pulsar_534511, что именно тебе нужно? Цифра в вашей ссылке не показывает разные цвета для групп. - person hpesoj626; 06.04.2018
comment
Он дает разные цвета, но обе легенды перекрываются, и они прозрачны, поэтому он показывает красный + синий как фиолетовый цвет! Я хочу две разные легенды, показывающие красный и синий цвет для сима и обсерватории отдельно. - person Pulsar_534511; 06.04.2018
comment
@ hpesoj626 эта ссылка предназначена для добавления еще одной легенды, дающей значения sim и obs! Так что в основном мне нужны три легенды: 1) для sim, 2) для obs и 3), общие легенды, дающие представление о значениях sim и obs. Третья легенда, с которой я могу пойти на компромисс, но в моем сюжете должны быть две легенды для симов и обследований. - person Pulsar_534511; 06.04.2018
comment
Ваш вопрос о цвете, похоже, был рассмотрен здесь и здесь. - person hpesoj626; 06.04.2018
comment
Кроме того, диаграмма, на которую вы ссылаетесь, находится в разделе здесь. Удачи. - person hpesoj626; 06.04.2018
comment
Спасибо за мгновенную помощь. То, что я хотел сделать, в значительной степени сработало. Подскажите, как мне сделать легенду о размере переменной без цвета? Он отображается серым цветом, и если я выбрал shape = 21, пузыри не будут заполнены цветами. - person Pulsar_534511; 07.04.2018
comment
Подскажите, как мне сделать легенду о переменной размера без цвета? Он отображается серым цветом, и если я выбрал shape = 21, пузыри не будут заполнены цветами. Не думаю, что я это понимаю. - person hpesoj626; 07.04.2018