Một hình ảnh đáng giá ngàn lời nói: Làm thế nào để tham gia dữ liệu và hình học đúng cách sử dụng ggmap
hành vi quan sát được: Như có thể thấy từ hình trên, tên nước không phù hợp với hình học thực tế của họ .
Hành vi mong muốn: Tôi muốn tham gia đúng khung dữ liệu với hình dạng của nó và hiển thị kết quả bằng ggmap.
Trước đây tôi đã tham gia các khung dữ liệu khác nhau, nhưng mọi thứ bị sai bởi thực tế là dường như ggmap
cần "củng cố" (thực sự tôi không biết dữ liệu thực sự có nghĩa là gì) để hiển thị kết quả.
Đây là những gì tôi đã thực hiện cho đến nay:
library(rgdal)
library(dplyr)
library(broom)
library(ggmap)
# Load GeoJSON file with countries.
countries = readOGR(dsn = "https://gist.githubusercontent.com/ccamara/fc26d8bb7e777488b446fbaad1e6ea63/raw/a6f69b6c3b4a75b02858e966b9d36c85982cbd32/countries.geojson")
# Load dataframe.
df = read.csv("https://gist.githubusercontent.com/ccamara/fc26d8bb7e777488b446fbaad1e6ea63/raw/a6f69b6c3b4a75b02858e966b9d36c85982cbd32/sample-dataframe.csv")
# Join geometry with dataframe.
countries$iso_a2 = as.factor(countries$iso_a2)
[email protected] = left_join([email protected], df, by = c('iso_a2' = 'country_code'))
# Convert to dataframe so it can be used by ggmap.
countries.t = tidy(countries)
# Here's where the problem starts, as by doing so, data has been lost!
# Recover attributes' table that was destroyed after using broom::tidy.
[email protected]$id = rownames([email protected]) # Adding a new id variable.
countries.t = left_join(countries.t, [email protected], by = "id")
ggplot(data = countries.t,
aes(long, lat, fill = country_name, group = group)) +
geom_polygon() +
geom_path(colour="black", lwd=0.05) + # polygon borders
coord_equal() +
ggtitle("Data and geometry have been messed!") +
theme(axis.text = element_blank(), # change the theme options
axis.title = element_blank(), # remove axis titles
axis.ticks = element_blank()) # remove axis ticks
Cảm ơn bạn đã giải thích tuyệt vời! Giải pháp của bạn hoạt động tuyệt vời! Có cái gì đó tôi không hiểu mặc dù (ngay cả sau khi đã kiểm tra '? Chổi :: gọn gàng'): Có vẻ như với tôi rằng tuyên bố 'countries.t = tidy (quốc gia, khu vực =" tên ")' là chìa khóa trong câu trả lời của bạn, nhưng tôi không hiểu chính xác 'region =" name "' là gì, mặc dù tôi đã quan sát thấy sự khác biệt đáng chú ý trong đầu ra nếu tôi chỉ nhập 'countries.t = tidy (countries)' – ccamara
Và cảm ơn vì đã chỉ ra rằng ggmap là không cần thiết cho những vấn đề này. Tuy nhiên, tôi muốn làm nhiều thứ hơn, nhưng mọi thứ đều dựa vào việc khắc phục vấn đề này;) – ccamara
@ccamara Theo '? Broom :: sp_tidy.SpatialPolygonsDataFrame', đối số' region' chỉ định tên của biến từ dữ liệu 'countries @ ' 'được sử dụng để chia nhỏ các vùng. –