Я пытаюсь построить несколько карт p ie для визуализации данных о распространенности заболеваний на карте Камеруна (Центральная Африка). P ie поможет визуализировать распространенность (prev), отрицательные случаи (neg) и размер выборки (sampling_size). К сожалению, я получаю эту ошибку:
Ошибка в geom_map (map = CMR_adm1f, aes (map_id = ID), fill = "grey97",:
all (c) ("x", "y", "id")% в% names (map)) не TRUE
Я подумал о двух подходах. Сначала нарисуйте p ie поверх карта, в точном месте (X, Y), где были собраны данные, но из-за того, что некоторые населенные пункты очень близки к другим, я беспокоюсь, что некоторые p ie могут быть сложены друг на друга, и дисплей будет грязным и трудно визуализировать (я попробовал это, но это не удалось… но я бы хотел изучить его дальше с небольшим радиусом p ie).
Второй подход, о котором я сообщаю, построить p ie в выбранном месте за пределами карты затем нарисуйте прямую линию от каждого p ie до соответствующего населенного пункта, см. пример https://www.cnn.com/2015/03/16/africa/kenya-flower-industry/index.html). Может быть, сделать это в Adobe Illustrator после завершения карты в R.
Я попытался отладить ошибку после нескольких сообщений, включая https://www.r-bloggers.com/plot-pie-charts-of-racial-composition-in-largest-metro-areas-on-a-map-in-r/ и https://www.r-bloggers.com/scatterpie-for-plotting-pies-on-ggplot/, но нет пока успех. Я предполагаю, что карта не выравнивается по местоположениям p ie XY. Как я могу это исправить?
Я скачал шейп-файлы Камеруна «деления уровня 1», найденные по следующей ссылке http://www.maplibrary.org/library/stacks/Africa/Cameroon/index.htm
Данные о болезни приведены ниже
data
structure(list(Pie_n = 1:9, lon = c(16.12345, 13.12345, 10.12345,
7.12345, 7.12345, 7.12345, 18.12345, 18.12345, 18.12345), lat = c(7.12345,
7.12345, 7.12345, 2.12345, 3.51234, 5.12345, 2.12345, 3.51234,
5.12345), neg = c(10L, 13L, 9L, 7L, 12L, 7L, 8L, 8L, 5L), positive = c(5L,
7L, 1L, 5L, 2L, 10L, 4L, 1L, 1L), sample_size = c(15L, 20L, 10L,
12L, 14L, 17L, 12L, 9L, 6L)), class = "data.frame", row.names = c(NA,
-9L))
Вот код, который я использовал (включая загруженные библиотеки):
library(sf)
library(rgeos)
library(ggplot2)
library(scatterpie)
library(maptools)
library(shapefiles)
data=read.csv(file="C:/Users/Marc/pie_ID.csv")
CMR_adm1=sf::st_read("C:/Users/Marc/CAM-level_1.shp")
CMR_adm1f=fortify(CMR_adm1)
ggplot(CMR_adm1f, aes(long, lat)) +
geom_map(map=CMR_adm1f, aes(map_id=ID), fill="grey97", color="grey") +
geom_scatterpie(data=data,
aes(lon, lat, r=sqrt(sample_size)/2.5),
cols=c("neg", "positive"),
alpha =0.5) +
scale_fill_manual(
breaks=c("neg", "positive"),
labels=c("not positive", "positive"),
values=c("neg"="white", "positive"="black")
) +
labs(title="disease prev in CMR",
caption="First mapping attempt", fill=NULL) +
coord_fixed() +
theme_bw() +
theme(legend.position=c(15.31131, 6.357799),
legend.justification = c(1,0),
panel.grid=element_blank(),
panel.border = element_blank(),
axis.title = element_blank(),
axis.text= element_blank(),
axis.ticks=element_blank())