Сначала напишите небольшую функцию 'stackbox', которая строит (используя «прямоугольник») квадраты стека в нужном месте.
Вот первая строка этой функции:
stackbox <- function(x,y,n,size,maxheight=5){
- , где «size» - это высота и ширина блоков, а «maxheight» позволяет вам иметь стопку высотой 5, 10 или любую другую.
Затем вызовите эту функцию для каждого округа, в котором есть дела.
Где именно вы застряли в процессе?
Вот функция полностью:
stackbox <- function(x,y,n,size,maxheight=5,...){
stackheight = seq(0,n,by=maxheight)
stackheight=diff(unique(c(stackheight,n)))
for(col in 1:length(stackheight)){
xl=rep(x+(col-1)*size,stackheight[col]) - (length(stackheight)/2)*size
yb=y+size*((1:stackheight[col])-1) - (max(stackheight)/2)*size
xr=xl+size
yt=yb+size
rect(xl,yb,xr,yt,...)
}
}
Пример:
plot(1:10)
for(i in 1:10){
stackbox(i,i,i,3,size=.1,col="red",border="white")
}
Чтобы сделать это на карте, вам нужны пакеты sp и maptools и шейп-файл или другой источник геопространственных данных, в котором есть ваши данные:
africa=readShapeSpatial(file.path(mapLib,"africa.shp"))
plot(africa,border="gray")
coords=coordinates(africa)
for(i in 1:nrow(africa)){
if(cases[i]>0){
stackbox(coords[i,1],coords[i,2],africa$cases[i],1,border="#606060",col="#0083FE")
}
}

Я выбрал цвета, которые немного похожи на ваш оригинал. Обратите внимание, что поля находятся в координатах графика, поэтому мне пришлось сделать их 0,1 градуса. Возможно, вы захотите преобразовать вашу карту в евклидову проекцию (используя spTransform из пакета: gdal), и тогда они будут в этих единицах и правильно выстроены.
Было бы сложно сделать красивые текстовые метки, как в оригинале ...