2015-10-01 31 views
6

Tôi không chắc tại sao không có điểm dữ liệu nào hiển thị trên bản đồ.Cách geom_point xóa các hàng chứa giá trị bị thiếu?

Store_ID visits CRIND_CC ISCC EBITDAR top_bottom Latitude Longitude 
     (int) (int) (int) (int) (dbl)  (chr)  (fctr)  (fctr) 
1  92 348 14819 39013 76449.15  top 41.731373 -93.58184 
2  2035 289 15584 35961 72454.42  top 41.589428 -93.80785 
3  50 266 14117 27262 49775.02  top 41.559017 -93.77287 
4  156 266  7797 25095 28645.95  top 41.6143 -93.834404 
5  66 234  8314 18718 46325.12  top 41.6002 -93.779236 
6  207  18  2159 17999 20097.99  bottom 41.636208 -93.531876 
7  59  23 10547 28806 52168.07  bottom 41.56153 -93.88083 
8  101  23  1469 11611 7325.45  bottom 41.20982 -93.84298 
9  130  26  2670 13561 14348.98  bottom 41.614517 -93.65789 
10  130  26  2670 13561 14348.98  bottom 41.6145172 -93.65789 
11  24  27 17916 41721 69991.10  bottom 41.597134 -93.49263 

> dput(droplevels(top_bottom)) 
structure(list(Store_ID = c(92L, 2035L, 50L, 156L, 66L, 207L, 
59L, 101L, 130L, 130L, 24L), visits = c(348L, 289L, 266L, 266L, 
234L, 18L, 23L, 23L, 26L, 26L, 27L), CRIND_CC = c(14819L, 15584L, 
14117L, 7797L, 8314L, 2159L, 10547L, 1469L, 2670L, 2670L, 17916L 
), ISCC = c(39013L, 35961L, 27262L, 25095L, 18718L, 17999L, 28806L, 
11611L, 13561L, 13561L, 41721L), EBITDAR = c(76449.15, 72454.42, 
49775.02, 28645.95, 46325.12, 20097.99, 52168.07, 7325.45, 14348.98, 
14348.98, 69991.1), top_bottom = c("top", "top", "top", "top", 
"top", "bottom", "bottom", "bottom", "bottom", "bottom", "bottom" 
), Latitude = structure(c(11L, 4L, 2L, 7L, 6L, 10L, 3L, 1L, 8L, 
9L, 5L), .Label = c("41.20982", "41.559017", "41.56153", "41.589428", 
"41.597134", "41.6002", "41.6143", "41.614517", "41.6145172", 
"41.636208", "41.731373"), class = "factor"), Longitude = structure(c(3L, 
7L, 5L, 8L, 6L, 2L, 10L, 9L, 4L, 4L, 1L), .Label = c("-93.49263", 
"-93.531876", "-93.58184", "-93.65789", "-93.77287", "-93.779236", 
"-93.80785", "-93.834404", "-93.84298", "-93.88083"), class = "factor")), row.names = c(NA, 
-11L), .Names = c("Store_ID", "visits", "CRIND_CC", "ISCC", "EBITDAR", 
"top_bottom", "Latitude", "Longitude"), class = c("tbl_df", "tbl", 
"data.frame")) 

Tạo cốt truyện:

map <- qmap('Des Moines') + 
     geom_point(data = top_bottom, aes(x = as.numeric(Longitude), 
        y = as.numeric(Latitude)), colour = top_bottom, size = 3) 

Tôi nhận được thông báo cảnh báo:

Removed 11 rows containing missing values (geom_point). 

Tuy nhiên, công trình này mà không có việc sử dụng các ggmap():

ggplot(top_bottom) + 
geom_point(aes(x = as.numeric(Longitude), y = as.numeric(Latitude)), 
      colour = top_bottom, size = 3) 

enter image description here

Làm cách nào để có được điểm để phủ lên ggmap ??

+1

Tôi nghĩ có điểm dữ liệu mà ở lại bên ngoài của bbox của đối tượng qmap. Đó là lý do tại sao, bạn thấy một số điểm dữ liệu được tự động loại bỏ, tôi nghĩ vậy. – jazzurro

+0

Câu hỏi này có thể được cải thiện đáng kể (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) có khả năng sẽ giúp bạn nhận được nhiều phản hồi hơn. Trước tiên, hãy sử dụng 'dput' thay vì dán dữ liệu. Thứ hai, vui lòng liệt kê các gói được sử dụng trong mã của bạn. –

+0

Điều đó đúng. Khi chuyển đổi từ một yếu tố thành số trong dòng 'geom_point', nó sẽ thay đổi giá trị. Bất kỳ ý tưởng làm thế nào để có được xung quanh đó? Tôi không thể âm mưu các yếu tố nếu không tôi nhận được lỗi, "biến kín đáo giao cho quy mô liên tục". – herkyonparade

Trả lời

5

Bạn đang sử dụng as.numeric() với số factor. Như đã thấy here cung cấp cho bạn số thứ tự cho yếu tố (không phải số được trình bày). Không có gì đáng ngạc nhiên, tất cả các cấp đó đều không nằm trên khung hình được hiển thị cho "Des Moines".

Sử dụng as.numeric(as.character(Latitude))as.numeric(as.character(Longitude)), càng xấu.

2

Xem dữ liệu mẫu, có vẻ như có một điểm dữ liệu không nằm trong khu vực bản đồ.

library(dplyr) 
library(ggplot2) 
library(ggmap) 

### You can find lon/lat for bbox using your ggmap object. 
### For instance, des1 <- ggmap(mymap1) 
### str(des1) 
### You could use bb2bbox() in the ggmap package to find lon/lat. 

filter(top_bottom, 
     between(Latitude, 41.27057, 41.92782), 
     between(Longitude, -94.04787, -93.16897)) -> inside 

setdiff(top_bottom, inside) 

# Store_ID visits CRIND_CC ISCC EBITDAR top_bottom Latitude Longitude 
#1  101  23  1469 11611 7325.45  bottom 41.20982 -93.84298 

Vì bạn đã sử dụng qmap() mà không chỉ định thu phóng, tôi không biết bạn đã thu phóng mức thu phóng nào. Hãy chơi xung quanh một chút. Trong trường hợp đầu tiên, có một điểm dữ liệu bị thiếu; Removed 1 rows containing missing values (geom_point).

mymap1 <- get_map('Des Moines', zoom = 10) 

ggmap(mymap1) + 
geom_point(data = top_bottom, aes(x = as.numeric(Longitude), 
      y = as.numeric(Latitude)), colour = top_bottom, size = 3) 

enter image description here

mymap2 <- get_map('Des Moines', zoom = 9) 

ggmap(mymap2) + 
geom_point(data = top_bottom, aes(x = as.numeric(Longitude), 
      y = as.numeric(Latitude)), colour = top_bottom, size = 3) 

enter image description here

Vì vậy, điều quan trọng, tôi nghĩ, là bạn muốn chắc chắn rằng bạn chọn mức zoom phù hợp với dữ liệu của bạn thiết lập. Đối với điều đó, bạn có thể muốn chỉ định thu phóng trong qmap(). Tôi hy vọng điều này sẽ giúp bạn.

DỮ LIỆU

top_bottom <- structure(list(Store_ID = c(92L, 2035L, 50L, 156L, 66L, 207L, 
59L, 101L, 130L, 130L, 24L), visits = c(348L, 289L, 266L, 266L, 
234L, 18L, 23L, 23L, 26L, 26L, 27L), CRIND_CC = c(14819L, 15584L, 
14117L, 7797L, 8314L, 2159L, 10547L, 1469L, 2670L, 2670L, 17916L 
), ISCC = c(39013L, 35961L, 27262L, 25095L, 18718L, 17999L, 28806L, 
11611L, 13561L, 13561L, 41721L), EBITDAR = c(76449.15, 72454.42, 
49775.02, 28645.95, 46325.12, 20097.99, 52168.07, 7325.45, 14348.98, 
14348.98, 69991.1), top_bottom = structure(c(2L, 2L, 2L, 2L, 
2L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("bottom", "top"), class = "factor"), 
Latitude = c(41.731373, 41.589428, 41.559017, 41.6143, 41.6002, 
41.636208, 41.56153, 41.20982, 41.614517, 41.6145172, 41.597134 
), Longitude = c(-93.58184, -93.80785, -93.77287, -93.834404, 
-93.779236, -93.531876, -93.88083, -93.84298, -93.65789, 
-93.65789, -93.49263)), .Names = c("Store_ID", "visits", 
"CRIND_CC", "ISCC", "EBITDAR", "top_bottom", "Latitude", "Longitude" 
), class = "data.frame", row.names = c("1", "2", "3", "4", "5", 
"6", "7", "8", "9", "10", "11")) 
Các vấn đề liên quan