我有覆蓋繪圖的問題。R ggmap,覆蓋繪圖,點覆蓋對方
情況看起來像這樣:我有一些座標和不同地名的數據,有些地方是在同一個地方 - 所以我有幾個地名相同的座標。如何繪製它們,讓它們不會互相遮掩?我嘗試過不同的形狀,最好的選擇是散佈這些點,或者用少量的顏色繪製一個點。但我不知道如何去做。我會感謝任何幫助。
代碼示例:
require(rgdal)
require(ggmap)
require(maptools)
require (plyr)
swd <- structure(list(nazwa = structure(c(8L, 8L, 9L, 7L, 7L, 7L, 3L,
5L, 6L, 4L, 2L, 2L, 1L), .Label = c("ODDZIAŁ CHIRURGII ONKOLOGICZNEJ",
"ODDZIAŁ GINEKOLOGII ONKOLOGICZNEJ", "ODDZIAŁ ONKOLOGICZNY",
"ODDZIAŁ ONKOLOGII I HEMATOLOGII DZIECIĘCEJ", "ODDZIAŁ ONKOLOGII KLINICZNEJ CHEMIOTERAPII",
"ODDZIAŁ RADIOTERAPII", "PORADNIA CHIRURGII ONKOLOGICZNEJ", "PORADNIA ONKOLOGICZNA",
"PORADNIA RADIOTERAPII"), class = "factor"), miasto = structure(c(8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("DZIAŁDOWO",
"ELBLĄG", "EŁK", "GIŻYCKO", "MRĄGOWO", "NOWE MIASTO LUBAWSKIE",
"OLECKO", "OLSZTYN", "OSTRÓDA", "PISZ", "SZCZYTNO"), class = "factor"),
dom = structure(c(17L, 5L, 17L, 17L, 8L, 18L, 5L, 17L, 17L,
20L, 17L, 19L, 17L), .Label = c("BARANKI 24", "GNIEŹNIEŃSKA 2",
"GOŁDAPSKA 1", "HENRYKA SIENKIEWICZA 4", "JAGIELLOŃSKA 78",
"JANA III SOBIESKIEGO 3 C/44", "KONOPNICKIEJ 1", "KOPERNIKA 30",
"KOŚCIUSZKI 30", "KRÓLEWIECKA 146", "KRÓLEWIECKA 146 146",
"LEŚNA 1", "MICKIEWICZA 10", "MICKIEWICZA 14", "OSEDLE MAZURSKIE 33 A",
"WARSZAWSKA 41", "WOJSKA POLSKIEGO 37", "ŻOŁNIERSKA 16B",
"ŻOŁNIERSKA 18", "ŻOŁNIERSKA 18 A"), class = "factor"), Lat = c(53.794077,
53.80182, 53.794077, 53.794077, 53.7827025, 53.7688275, 53.80182,
53.794077, 53.794077, 53.7696245, 53.794077, 53.7698809,
53.794077), Long = c(20.483249, 20.508952, 20.483249, 20.483249,
20.4918876, 20.4903438, 20.508952, 20.483249, 20.483249,
20.4927874, 20.483249, 20.492049, 20.483249)), .Names = c("nazwa",
"miasto", "dom", "Lat", "Long"), row.names = c(1L, 2L, 12L, 13L,
14L, 15L, 23L, 25L, 27L, 29L, 30L, 31L, 32L), class = "data.frame")
polska <- get_googlemap(
center =c('Olsztyn, Polska'),
zoom=12,
maptype="roadmap" ,
scale = 2
,color = "bw"
)
kontury<- ggmap(polska)
punkty <- kontury+ geom_point(aes(x=Long, y=Lat, color=nazwa, shape=nazwa)
,data=subset(swd,( nazwa=='ODDZIAŁ GINEKOLOGII ONKOLOGICZNEJ'|
nazwa=='PORADNIA CHIRURGII ONKOLOGICZNEJ'|
nazwa=='ODDZIAŁ ONKOLOGII KLINICZNEJ CHEMIOTERAPII'|
nazwa=='PORADNIA ONKOLOGICZNA'|
nazwa=='ODDZIAŁ RADIOTERAPII'&
miasto=="OLSZTYN"))
,size=7
)+
guides(fill = guide_legend(ncol = 1)) +
theme(legend.position="right") +
scale_shape_manual(values = c(15,16,17,18,19,20), name="Symbol")
print(punkty)
UPDATE 基礎上的答案從菲利普我做了這樣的事情:
require(rgdal)
require(ggmap)
require(maptools)
require (plyr)
swd <- structure(list(nazwa = structure(c(8L, 8L, 9L, 7L, 7L, 7L, 3L,
5L, 6L, 4L, 2L, 2L, 1L), .Label = c("ODDZIAŁ CHIRURGII ONKOLOGICZNEJ",
"ODDZIAŁ GINEKOLOGII ONKOLOGICZNEJ", "ODDZIAŁ ONKOLOGICZNY",
"ODDZIAŁ ONKOLOGII I HEMATOLOGII DZIECIĘCEJ", "ODDZIAŁ ONKOLOGII KLINICZNEJ CHEMIOTERAPII",
"ODDZIAŁ RADIOTERAPII", "PORADNIA CHIRURGII ONKOLOGICZNEJ", "PORADNIA ONKOLOGICZNA",
"PORADNIA RADIOTERAPII"), class = "factor"), miasto = structure(c(8L,
8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L), .Label = c("DZIAŁDOWO",
"ELBLĄG", "EŁK", "GIŻYCKO", "MRĄGOWO", "NOWE MIASTO LUBAWSKIE",
"OLECKO", "OLSZTYN", "OSTRÓDA", "PISZ", "SZCZYTNO"), class = "factor"),
dom = structure(c(17L, 5L, 17L, 17L, 8L, 18L, 5L, 17L, 17L,
20L, 17L, 19L, 17L), .Label = c("BARANKI 24", "GNIEŹNIEŃSKA 2",
"GOŁDAPSKA 1", "HENRYKA SIENKIEWICZA 4", "JAGIELLOŃSKA 78",
"JANA III SOBIESKIEGO 3 C/44", "KONOPNICKIEJ 1", "KOPERNIKA 30",
"KOŚCIUSZKI 30", "KRÓLEWIECKA 146", "KRÓLEWIECKA 146 146",
"LEŚNA 1", "MICKIEWICZA 10", "MICKIEWICZA 14", "OSEDLE MAZURSKIE 33 A",
"WARSZAWSKA 41", "WOJSKA POLSKIEGO 37", "ŻOŁNIERSKA 16B",
"ŻOŁNIERSKA 18", "ŻOŁNIERSKA 18 A"), class = "factor"), Lat = c(53.794077,
53.80182, 53.794077, 53.794077, 53.7827025, 53.7688275, 53.80182,
53.794077, 53.794077, 53.7696245, 53.794077, 53.7698809,
53.794077), Long = c(20.483249, 20.508952, 20.483249, 20.483249,
20.4918876, 20.4903438, 20.508952, 20.483249, 20.483249,
20.4927874, 20.483249, 20.492049, 20.483249)), .Names = c("nazwa",
"miasto", "dom", "Lat", "Long"), row.names = c(1L, 2L, 12L, 13L,
14L, 15L, 23L, 25L, 27L, 29L, 30L, 31L, 32L), class = "data.frame")
swd <- data.table(swd) # idk rly why but it didnt want to work w/o this command
setkey(swd,dom)
swd <- swd[swd[,.N,keyby=dom],.(dom,is.unique=N==1,nazwa,miasto,Lat,Long)]
olsztynOSM <- get_openstreetmap(bbox = c (left=20.4359, bottom = 53.7319, right= 20.5623, top= 53.81), scale = 40913, color = c('color'))
moja.paleta <- brewer.pal(9, "Set1")
swd$kolor <- moja.paleta[swd$nazwa]
konturyOSM<- ggmap(olsztynOSM)
punkty <- konturyOSM + geom_jitter(aes(x=Long,y=Lat,fill=nazwa), data = swd[!(is.unique)], width=0.006,height=0.006, size=7,pch=21) +
geom_point(aes(x=Long,y=Lat,fill=nazwa), data = swd[(is.unique)], size=7, pch=25)+
scale_fill_manual(values=setNames(moja.paleta,levels(swd$nazwa)),name='Legenda') +
guides(fill = guide_legend(ncol = 1)) +
theme(legend.position="right")
plot(punkty)
輸出
但後來生病調整所有點不僅是一個與幾個地名相同的座標,和我有座標單一名稱更加分。在這個數據樣本中,我只提出了這個問題,原始數據要大得多。或者我錯了?我會嘗試在第二,寫我看到的。 – banshe
如果這是一個大問題,你可以拆分你的數據(或者分成兩個'data.frames',或者通過添加一列作爲指標,並使用'data'參數到'geom_point'),然後做兩個圖層:一個用於geom_point的唯一數據,另一個用於geom_jitter(或者等同於width/height = 0)的已繪製數據。我添加了一個虛擬MWE,您應該能夠修補以獲得您的結果。 – Philip
非常感謝你的努力,你的例子非常有用。我會試一試,我會嘗試將你的想法添加到我的腳本中。謝謝! :) – banshe