2017-09-12 41 views
3

我想繪製英國地圖上的點,點的大小根據數據而變化。試圖在地圖上繪製點時出錯

這是我的數據文件的一部分(這是我第一次做一個可重複的例子 - 我已經在文件的頭部使用了dput,但請讓我知道是否有辦法我可以更清楚地做到這一點或更好)。

structure(list(V1 = c("St George's", "Sheffield", "Plymouth", 
"Exeter", "King's College London", "East Anglia"), 
Sample = c(183L, 139L, 106L, 128L, 152L, 178L), 
Total = c(417L, 342L, 350L, 520L, 659L, 875L), 
Response = c(43.9, 40.6, 30.3, 24.6, 23.1, 20.3), 
Lat = c(51.427194, 53.380941, 50.415735, 50.737137, 51.511486, 52.621921), 
Long = c(-0.174503, -1.487947, -4.110571, -3.535147, -0.115997, 1.239176)), 
.Names = c("V1", "Sample", "Total", "Response", "Lat", "Long"), 
row.names = c(NA, 6L), class = "data.frame") 

一旦我得到了數據文件加載,我這樣做:

UK <- map_data(map = "world", region = "UK") 

ggplot(data = UK, aes(x = long, y = lat, group = group)) + 
    geom_polygon() + 
    geom_point(data = unidata, aes(x = Long, y = Lat, size = Response, col = "red")) + 
    coord_map() 

然而,這讓我以下錯誤:

Error in eval(expr, envir, enclos) : object 'group' not found

有在英國一組數據,當我運行這個代碼而沒有geom_point行時,我得到了英國的標準地圖,所以我認爲錯誤在這一行。但是,geom_point似乎並不需要組。所以我必須忽略一些東西?

回答

2

將參數描述使用哪個數據框和列到geom_polygon()元素時,它起作用。運行下面的代碼,你會得到所希望的描繪:

ggplot() + 
    geom_polygon(data = UK, aes(x = long, y = lat, group = group)) + 
    geom_point(data = unidata, aes(x = Long, y = Lat, size = Response), col = "red") + 
    coord_map() 

我也感動aes()括號外的col = "red"參數,所以它不會在你的傳說出現。

+0

謝謝,這是完美的!出於興趣,你知道這是爲什麼嗎?是否因爲一旦添加geom_point的東西(來自不同的數據集),geom_polygon需要更多的定義,因爲它不清楚它應該做什麼? – Megan

+0

我正在閱讀[此帖](http://r.789695.n4.nabble.com/Plotting-from-different-data-sources-on-the-same-plot-with-ggplot2-td835473.html)在這個問題上Hadley Wickham(他寫了ggplot2)發表了一些評論,他的解決方案涉及到兩個數據框中的x和y變量的通用名稱。擴大這一點,我來到這個解決方案。看起來你在'ggplot()'函數中定義的映射適用於所有的可視元素,並且由於unidata數據框沒有組列,所以會出現錯誤。 –

+0

這很有道理,而且非常有幫助,因爲我很確定我過去曾經有過類似的小錯誤。謝謝。 – Megan