Я пытаюсь сделать карту Choropleth в Германии, используя ggplot2. Мои данные представляют собой CSV-файл с 2 строками (RS = содержит номера от 1 до 16 для каждого немецкого состояния & Тариф = 16 случайных положительных и отрицательных чисел).Неправильное отображение данных на карте Choropleth с ggplot2 в R
RS Tariff
1 01 -5.25
2 02 7.16
3 03 6.65
4 04 3.10
5 05 3.69
6 06 2.49
7 07 1.89
8 08 3.93
9 09 -5.84
10 10 -2.61
11 11 -0.21
12 12 2.35
13 13 -5.94
14 14 -7.54
15 15 -3.27
16 16 -8.75
Также у меня есть файл формы Germany shape file. Я хочу сделать, чтобы построить это положительное и отрицательное числа на карте германии для каждого состояния, с двумя цветами (положительный = зеленый и отрицательный = красный). Ниже мой код
library(XLConnect)
library(sp)
library(rgdal)
library(ggplot2)
library(plyr)
library(RColorBrewer)
library(DataCombine)
library(rgeos)
library(maptools)
#### EEG Data Read ####
eeg<-read.csv(file = "data/testdata1.csv", skip = 0, sep = ",", dec=".", header=TRUE)
colnames(eeg)<-c("RS", "Tariff")
eeg$RS<- c("01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16")
eeg$RS<-as.factor(eeg$RS)
eeg$Tariff<- as.numeric(eeg$Tariff)
#### Shape Data Read ####
bundesl<-readOGR("data/new_shape/vg2500_bld.shp", "vg2500_bld")
[email protected]<- [email protected][order(bundesl$RS, na.last=NA),]
### Rearrange shape data for better merging ###
levels(bundesl$GEN)<- c("Schleswig-Holstein", "Mecklenburg-Vorpommern", "Hamburg", "Bremen", "Niedersachsen", "Sachsen-Anhalt", "Brandenburg",
"Berlin", "Nordrhein-Westfalen", "Hessen","Thüringen","Sachsen", "Rheinland-Pfalz", "Saarland", "Baden- Württemberg", "Bayern")
bundesl$GEN<- c("Schleswig-Holstein", "Mecklenburg-Vorpommern", "Hamburg", "Bremen", "Niedersachsen", "Sachsen-Anhalt", "Brandenburg",
"Berlin", "Nordrhein-Westfalen", "Hessen","Thüringen","Sachsen", "Rheinland-Pfalz", "Saarland", "Baden-Württemberg", "Bayern")
bundesl$SHAPE_LENG<- c("1217255.7","1780980.8","175253.8","154971.6","2016496.4","949096.8",
"1295460.4","180751.2","1352108","1105092.8","961942.7","979294.3","910650.4",
"282910.8","1298891.7","2046039.3")
bundesl$SHAPE_AREA<- c("15857425536","23044684847","760539820","405480872","47716406483","20494982327","29653902483","886480139","34047269991","21092318103","16178531941","18401642456","19834907486","2578541706","35801397076","70550070623")
# #### Shape Data und EEG Data join ####
[email protected]<-merge([email protected], eeg, by="RS", all=TRUE)
# #### Shapes Plot ####
[email protected]$id <- (as.numeric(rownames([email protected]))-1)
bundesl.df<-fortify(bundesland)
bundesl.df <- join(bundesl.df, [email protected], by="id")
ggp <- ggplot(data=bundesl.df, aes(x=long, y=lat, group=group))
ggp <- ggp + geom_polygon(aes(fill=Tariff), col="black")
ggp <- ggp + coord_map()
ggp <- ggp + scale_fill_continuous(name=expression(Tariff), low = "red", high = "green", space = "Lab", na.value = "white", guide = "colourbar")
ggp <- ggp + theme_minimal()
ggp <- ggp + theme(axis.title=element_blank(), axis.ticks=element_blank(), axis.text=element_blank())
ggp
До сих пор мне удалось построить карту, но с отображением неправильных данных. Я имею в виду состояние с положительным Тарифом, например, Шлезвиг-Гольштейн должен быть зеленым, но красным, а Бавария - красным, но зеленым.
Мое предположение, что есть проблема с fortify function. Мои данные - всего 16 строк, но после фортификации он печатает 1000+ строк. Зачем?? и это то, что вызывает несоответствие данных. Я сделал все поиски в Интернете, которые, возможно, смогу для решения. Я был бы признателен, если кто-нибудь может дать мне ответ о том, почему эта проблема происходит.
Благодарим за помощь!
Спасибо за помощь @hrbmstr, ваш ответ разъясняет, что происходит не так. Но я все еще не могу решить настоящую проблему. Боже, помоги мне :(PS Извините за ответ так поздно, жизнь мешала. Спасибо еще раз. – RNovice
@hrbemstr Можете ли вы рассказать мне, почему вы использовали spTransform? – RNovice
Как говорится в комментариях, он предпроектирует координаты на международном уровне признанный правильный прогноз для использования с Германией. Вы можете избавиться от этого и либо просто использовать 'coord_map()' (вместо 'coord_equal()'), который будет иметь 'ggplot' дело с использованием проекции для вас (и это будет быть Mercator по умолчанию), или вы можете использовать альтернативный предложенный в комментариях 'coord_map (« mollweide »)'. Без 'coord_map' или' spTransform' + 'coord_equal' у вас будет карта, которая перескакивает до размеров графика – hrbrmstr