#r #dataframe #ggplot2 #coordinates #ggmap
Вопрос:
Я пытаюсь составить карту мира, выделив только определенные страны на основе моих данных. Чего я пытаюсь добиться, так это раскрасить в синие оттенки отрицательные значения (чем больше число, тем темнее цвет, например, -5 будет темно-синим, -1 светло-синим), а в красных оттенках-положительные (5= темный, 1 = светло-красный). Кроме того, я хотел соответствующим образом наклеить ярлыки («-5″,»-4″,»-3″…»4″,»5″); Меня интересует только сокращение значений в 11 кластерах (от -5 до 5), что означает, что страна со значением 97 будет окрашена так же, как страна со значением 5. Вот мой код:
library(RColorBrewer)
library(maptools)
library(ggplot2)
if (!require(gpclib)) install.packages("gpclib", type="source")
gpclibPermit()
data(wrld_simpl)
ddf = read.table(text="
country value
'Argentina' 2
'Australia' 3
'Belgium' 5
'Brazil' 17
'Canada' 2
'China' -2
'France' 7
'Germany' 97
'Indonesia' -2
'Italy' 9
'Japan' 9
'Portugal' -2
'Russia' 3
'Saudi Arabia' 2
'Singapore' -5
'Slovenia' 1
'Spain' -3
'Switzerland' 0
'Turkey' 0
'United States' 18", header=TRUE)
plotme <- function() {
# align colors to countries
ddf$brk <- cut(ddf$value,
breaks= -5:5,
include.lowest=TRUE)
# this lets us use the contry name vs 3-letter ISO
wrld_simpl@data$id <- wrld_simpl@data$NAME
wrld <- fortify(wrld_simpl, region="id")
wrld <- subset(wrld, id != "Antarctica") # we don't rly need Antarctica
gg <- ggplot()
# setup base map
gg <- gg geom_map(data=wrld, map=wrld, aes(map_id=id, x=long, y=lat), fill="white", color="#7f7f7f", size=0.25)
# add our colored regions
gg <- gg geom_map(data=ddf, map=wrld, aes(map_id=country, fill=brk), color="#7f7f7f", size=0.25)
# this sets the scale and, hence, the legend
gg <- gg scale_fill_manual(values=colorRampPalette(brewer.pal(11,'RdBu'))(length(ddf$value)),
name="Country")
# this gives us proper coords. mercator proj is default
gg <- gg coord_map()
gg <- gg labs(x="", y="")
gg <- gg theme(plot.background = element_rect(fill = "transparent", colour = NA),
panel.border = element_blank(),
panel.background = element_rect(fill = "transparent", colour = NA),
panel.grid = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
legend.position = "bottom")
gg
}
plotme()
Я не понимаю, почему он не использует выбранную мной палитру (она тоже должна быть синей), а также я не могу заставить аргумент «метки =» работать в функции cut (). Некоторые страны (Франция, Германия, США) также не окрашиваются!
Вот сюжет, который я получаю:
БОЛЬШОЕ ВАМ СПАСИБО!!!
Комментарии:
1.
length(ddf$value)
Помогает лиnlevels(ddf$brk)
вообще замена на шкале?2. к сожалению, нет … но спасибо за усилия!