Добавить график ggplot p ie на карту ggmap - PullRequest
0 голосов
/ 17 марта 2020

Я недавно пытался опубликовать аналогичный вопрос, используя rworldmap, но мне посоветовали попробовать вместо него ggmap из-за простоты использования в сочетании с ggplot.

Мой вопрос два, и мои знания о R достаточно разумны c, поэтому, пожалуйста, потерпите меня.

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

У меня есть p ie диаграмм, созданных с использованием кода:

AD_Pie <- 
ggplot(Tally_AD_Sorted, aes(x = "", y = n1, fill = Haplogroup)) +
  geom_bar(stat = "identity", width = 1, size = 1) +
  coord_polar("y", start = 0, direction = -1)+
  scale_fill_manual(values = c("R1b" = "#7100b0", "R1a" = "#ff9c2c", "E1b" = "#bc67ff", "N1a" = "#94a800", "R1" = "#b1008a", "I2a" = "#d23645", "J2a" = "#fd2e00", "I1" = "#009cf8", "Other" = "#4f574e")) +
  theme_void() +
  guides(fill = guide_legend(ncol = 1)) +
  theme(axis.line = element_blank(), axis.ticks = element_blank(), plot.title = element_text(hjust = 0.5))+
  labs(title = "Haplogroup Proportion, >1AD") +
  ggsave("AD_pie2.png", dpi = 1000)

Это дает мне диаграмму ap ie с легендой, но в какой-то момент я буду удалять легенду.

Я также создал карту и нанес координаты в виде точек на этой карте, используя код:

map <- get_stamenmap(c(left = -24.6, bottom = 20.5, right = 179.0, top = 77.8), size = c(640,640), zoom = 5, maptype = "terrain-background", color = "bw", force = TRUE)
png(file = "AD_Map.png", width = 10, height = 8, units = 'in', res = 800)
ggmap(map) +
  geom_point(data = Coordinate_AD_Clean2, mapping = aes(x = long, y = lat, fill = Haplogroup, shape = Haplogroup),
             size = 2,
             stroke = 0) +
  guides(fill = guide_legend(ncol = 2)) +
  scale_fill_manual(breaks = c("R1b",
                               "R1a",
                               "E1b", 
                               "N1a", 
                               "R1", 
                               "I2a", 
                               "J2a", 
                               "I1",
                               "C",
                               "C2", 
                               "G",
                               "G2a",
                               "HIJK", 
                               "I", 
                               "I1a",
                               "I2b", 
                               "IJK", 
                               "J",
                               "J1",
                               "L",
                               "O", 
                               "P~", 
                               "Q1a", 
                               "R"),
                      values = c("#7100b0",
                                "#ff9c2c",
                                "#bc67ff", 
                                "#94a800", 
                                "#b1008a", 
                                "#d23645", 
                                "#fd2e00", 
                                "#009cf8",
                                "#4f574e",
                                "#4f574e", 
                                "#4f574e",
                                "#4f574e",
                                "#4f574e", 
                                "#4f574e", 
                                "#4f574e",
                                "#4f574e", 
                                "#4f574e", 
                                "#4f574e",
                                "#4f574e",
                                "#4f574e",
                                "#4f574e", 
                                "#4f574e", 
                                "#4f574e", 
                                "#4f574e")) +
  scale_shape_manual(breaks = c("R1b",
                                "R1a",
                                "E1b", 
                                "N1a", 
                                "R1", 
                                "I2a", 
                                "J2a", 
                                "I1",
                                "C",
                                "C2", 
                                "G",
                                "G2a",
                                "HIJK", 
                                "I", 
                                "I1a",
                                "I2b", 
                                "IJK", 
                                "J",
                                "J1",
                                "L",
                                "O", 
                                "P~", 
                                "Q1a", 
                                "R"),
                     values = c(24,
                                24,
                                24,
                                24,
                                24,
                                24, 
                                24,
                                24,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21,
                                21))




dev.off()

Мой вопрос заключается в том, можно ли построить диаграмму p ie Я создал в ggplot на карте, которую я создал в ggmap. По этому вопросу было несколько похожих вопросов, но мне еще не удалось найти однозначного или простого ответа, поэтому я надеюсь, что, возможно, мне поможет более индивидуальный ответ. Мне нужно только нанести график p ie один раз, в разумных размерах, на одну карту в определенной позиции.

Мой второй вопрос - скорее вопрос кода. В моем коде карты я должен вручную указать список цветов и форм для каждого значения. Есть ли способ сделать этот код проще?

Спасибо за ваше время, помощь очень ценится!

...