Разделение слоев графика geom_point и geom_path в ggplot (R) - PullRequest
3 голосов
/ 31 марта 2020

Мой сюжет состоит из трех кругов и двух точек. Я надеюсь завершить две, казалось бы, простые, но трудные задачи. Я надеюсь: 1) создать две легенды и 2) изменить форму, размер и цвет предмета домашнего обихода. Круги, созданные с использованием следующей функции ...

Затем я вызываю функцию с 3 различными входами, чтобы сгенерировать 100 точек xy для каждой кривой

A <- circleFun(c(0,0), 1, npoints=100) %>%
        cbind("A") %>%
          set_names(c("x", "y", "Neighborhood"))
B <- circleFun(c(.5, .5), 1, npoints=100) %>%
         cbind("B") %>%
          set_names(c("x", "y", "Neighborhood"))

C <- circleFun(c(1, 1), 1, npoints=100) %>%
      cbind("C") %>%
        set_names(c("x", "y", "Neighborhood"))
neigh <- rbind(A, B, C)

Затем я создаю свою точку data

hh <- as.data.frame(matrix(c(.25,.5,.25,.5,1,2), 2, 3)) %>%
        set_names(c("x", "y", "Household"))

Пока у меня есть два разных набора данных, обе точки, обе следующие за aes (x, y). Однако их группировка отличается: первый набор данных сгруппирован по «Соседству», второй сгруппирован по «Домашнему хозяйству».

Затем я строю график того, что у меня есть до сих пор ..

  # Plot Neighborhoods and set up plot specifics
  c <- ggplot(data=neigh, aes(x,y, group = Neighborhood, color = Neighborhood)) +
  geom_path(size = 1.5) +
  xlab("Quality of Public Amenities") +
  ylab("Price of Housing") +
  ggtitle("Figure 2.5") +
  theme(panel.grid = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        plot.title = element_text(hjust=0.5, face = 'bold', size = 14)) 

 # Add corresponding household points
 c+geom_point(data=hh, aes(x=x,y=y,group = as.factor(Household), color = as.factor(Household)))

Это мой вывод ..

enter image description here Так почему я прошу помощи здесь? Я надеюсь 1) Создать две легенды, одну для Соседства и другую для Домохозяйств и 2) изменить форму, размер и цвет точки домохозяйства. Из-за того, что они оба точечных графика, R не позволяет мне отделить эстетику графиков (aes()), что заставляет меня не выполнять задачи 1 и 2. Пример полностью воспроизводим.

1 Ответ

2 голосов
/ 31 марта 2020

Попробуйте это. Сначала я использую только x и y в качестве глобальной эстетики. Во-вторых, вместо сопоставления «Домохозяйство» в geom_point на color я сопоставляю его с fill, что добавляет вторую легенду. Один недостаток этого решения. Вы должны выбрать из заполненных форм, например, форму 21 для заполненных точек. Размер точек можно установить с помощью аргумента size, а цвета можно установить, например, с помощью scale_fill_manual.

library(ggplot2)
library(dplyr)
library(purrr)

 # Plot Neighborhoods and set up plot specifics
c <- ggplot(data=neigh, aes(x,y)) +
  geom_path(aes(group = Neighborhood, color = Neighborhood), size = 1.5) +
  xlab("Quality of Public Amenities") +
  ylab("Price of Housing") +
  ggtitle("Figure 2.5") +
  theme(panel.grid = element_blank(),
        axis.text.x = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.x = element_blank(),
        axis.ticks.y = element_blank(),
        plot.title = element_text(hjust=0.5, face = 'bold', size = 14)) 

# Add corresponding household points
c + 
  geom_point(data=hh, aes(group = as.factor(Household), fill = as.factor(Household)), shape = 21, color = "transparent", size = 2) +
  scale_fill_manual(name = "Household", values = c("black", "orange"))

Создано в 2020-03-31 по представьте пакет (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...