создание карты с использованием шейп-файлов и построение диаграммы p ie для визуализации распространенности заболевания - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь построить несколько карт 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())
...