Карта мира - построение кругов, размер круга соответствует количеству

Я хотел бы иметь возможность создать карту мира с кругами на графике, относящемся к количеству документов.

Это я пытался сделать с помощью mapBubbles, но при построении графика что-то пошло не так.

Файл данных, который у меня есть, выглядит следующим образом:

ISO3V10   Country   No of Documents    Lat  Lon
ARG     Argentina   41          -64 -34
AUS     Australia   224         133 -27
CAN     Canada      426         -95 60
IRL     Ireland 68           -8 53
ITA     Italy             583           12.8333 42.8333
NLD     Netherlands 327          5.75   52.5
NZL     New Zealand 26           174    -41
ESP     Spain             325            -4  40
GBR     United Kingdom  2849             -2 54
USA     United States   3162            -97 38

Код, который я написал, приведен ниже:

# Thanks to Andrie for the reproducible code and Paolo for the suggested edit

zz <-"ISO3V10   Country No.of.Documents Lat  Lon
ARG Argentina   41  -64 -34
AUS Australia   224 133 -27
CAN Canada  426 -95 60
IRL Ireland 68  -8  53
ITA Italy   583 12.8333 42.8333
NLD Netherlands 327 5.75    52.5
NZL 'New Zealand' 26  174 -41
ESP Spain   325 -4  40
GBR 'United Kingdom'  2849    -2  54
USA 'United States'   3162    -97 38
"

dF2 <- read.table(textConnection(zz), header = TRUE)

# dF2 <- read.delim(file="C:\\Users\\js207963\\Documents\\noofpublications_AllUpdated.txt", header = TRUE, sep = "\t")
 dF2[]
 par(mai=c(0,0,0.2,0),xaxs="i",yaxs="i")
 mapBubbles(dF2=getMap(), nameZSize="No.of.Documents", nameZColour="Country",oceanCol="lightblue", landCol="wheat", addLegend=FALSE

Итак, вопрос в том, можете ли вы помочь мне исправить код для правильного построения данных?

Привет, Джесс


person Jess Sheasby    schedule 25.05.2012    source источник
comment
Вероятно, будет лучше, если вы будете придерживаться одной учетной записи для stackoverflow.   -  person BenBarnes    schedule 25.05.2012
comment
Я даже не знал, что у меня 2 аккаунта!   -  person Jess Sheasby    schedule 19.06.2012


Ответы (2)


Вы можете построить это в ggplot, используя:

введите здесь описание изображения

Воссоздайте свои данные:

dat <- read.table(text="
ISO3V10   Country   'No of Documents'    Lat  Lon
ARG     Argentina   41          -64 -34
AUS     Australia   224         133 -27
CAN     Canada      426         -95 60
IRL     Ireland 68           -8 53
ITA     Italy             583           12.8333 42.8333
NLD     Netherlands 327          5.75   52.5
NZL     'New Zealand' 26           174    -41
ESP     Spain             325            -4  40
GBR     'United Kingdom'  2849             -2 54
USA     'United States'   3162            -97 38
", header=TRUE)

Загрузить пакеты и построить график:

library(ggplot2)
library(maps)

mdat <- map_data('world')

str(mdat)
ggplot() + 
  geom_polygon(dat=mdat, aes(long, lat, group=group), fill="grey50") +
  geom_point(data=dat, 
             aes(x=Lat, y=Lon, map_id=Country, size=`No.of.Documents`), col="red")
person Andrie    schedule 25.05.2012
comment
когда я использую приведенный выше код, я получаю это сообщение об ошибке: «Ошибка в eval (expr, envir, enclos): объект «длинный» не найден», есть идеи, что не так? - person Jess Sheasby; 19.06.2012
comment
@JessSheasby Я только что запустил этот код в чистом сеансе R, и он у меня работает. Извините, но я не знаю, что происходит в вашем случае. - person Andrie; 20.06.2012
comment
Я понимаю, что этот вопрос устарел, но я думаю, что в данных столбцы широты и долготы помечены неправильно - у вас есть lat значения › 90 и ‹ -90. - person SymbolixAU; 07.05.2017

Вам нужно передать немного больше информации в функцию mapBubbles, поскольку ваш фрейм данных не является SpatialPolygonsDataFrame. Следующее должно работать (вам Lat, а Lon может быть неправильно помечено):

 mapBubbles(dF=dF2, nameZSize="No.of.Documents",
  nameZColour="Country",oceanCol="lightblue", landCol="wheat",
  addLegend=FALSE, nameX = "Lat", nameY = "Lon")

Выше nameX и nameY передаются в функцию, чтобы указать, где строить пузыри. Кроме того, передайте фрейм данных dF2 в аргумент dF вместо вызова getMap().

ИЗМЕНИТЬ:

Мне также нравится ответ Андри с ggplot2 (среди прочего, пространство используется лучше, чем на рисунке ниже), но, поскольку вы разместили другие вопросы, специально используя rworldmap, я счел целесообразным придерживаться этого пакета.

Карта мира с пузырьками

person BenBarnes    schedule 25.05.2012
comment
Это прекрасно работает, можно ли удалить легенду или уменьшить ее? Когда я увеличиваю масштаб Европы, легенда остается, и значения также остаются прежними, что может вызвать путаницу! - person Jess Sheasby; 19.06.2012
comment
Чтобы избежать построения легенды для цветового кодирования по странам, добавьте addColourLegend = FALSE к аргументам для mapBubbles. Чтобы сделать легенду меньше, вам, возможно, придется настроить функцию mapBubbles или добавить легенду после построения с помощью вызова addMapLegendBoxes. - person BenBarnes; 20.06.2012
comment
@JessSheasby, извините, забыл указать ваше имя пользователя, чтобы вы получали уведомления. Пожалуйста, смотрите комментарий выше :) - person BenBarnes; 20.06.2012