2017-08-11 55 views
1

我有一些問題創建一個地圖與ggplot2以上我使用geom_point項目點。在以pdf或其他支持導出時,點的大小會有所不同(因爲她是絕對的而不是軸相對的)。我已經搜索瞭如何改變這個問題,並且發現了很多答案,說這是有意的,因爲如果不是這種情況,那麼每次軸的變化就會變成橢圓。然而,我明白,因爲我在地圖上工作,所以我使用coord_fixed來修復輸出並避免我的地圖的變形,所以如果我能夠相對於地塊大小修正點的大小,這不會是一個問題。ggplot geom_point不同的大小與窗口大小

有沒有一些解決方案來做到這一點?我讀過一些有趣的建議,使用geom_polygon來人爲地創建省略號。但我有兩個問題,方法:

  • 首先,我不知道如何實現我的數據,我現在知道我點的中心的地方,但我怎麼可能再後來說如何定義所有的中心,然後定義一個實心圓圈多邊形?

  • 第二我已經用scale_size_continuous繪製較小或較大的點相對於其他變量。我怎麼能用geom_polygon來實現呢?

法西特:我會很樂意要麼重寫不可能確定一個相對單位爲點大小,或與一些幫助,使的可能性,我明白,我怎麼可以創造同樣的事情與功能geom_polygon

我嘗試加入一個可重複使用的小例子。這僅僅是一個例子,我的數據的問題是我有很多封閉的小值(主要是1,就像可重現的例子中的小點),所以它們看起來非常好,但是當輸出時它可以變得更大並通過重疊繪圖造成很多問題,這就是爲什麼我需要修正這個比例的原因。

Link for the map informationssecond link for map informations

dat <- data.frame(postcode=c(3012, 2000, 1669, 4054, 6558), n=c(1, 20, 40, 60, 80)) 

ch <- read.csv("location/PLZO_CSV_LV03/PLZO_CSV_LV03.csv", sep=";")#first link, to attribute a geographical location for each postcode 
ch <- ch%>% 
    distinct(PLZ, .keep_all=TRUE)%>% 
    group_by(PLZ, N, E)%>% 
    summarise 
ch <- ch%>% 
    filter(PLZ %in% dat$postcode) 
ch <- ch%>% 
    arrange(desc(as.numeric(PLZ))) 
dat <- dat%>% 
    arrange(desc(as.numeric(postcode))) 
datmap <- bind_cols(dat, ch) 

ch2 <- readOGR("location/PLZO_SHP_LV03/PLZO_PLZ.shp")#second link, to make the shape of the country 
ch2 <- fortify(ch2) 

a <- ggplot()+ 
geom_polygon(dat=ch2, aes(x=long, y=lat, group=group), colour="grey75", fill="grey75")+ 
geom_jitter(data=datmap, aes(x=E, y=N, group=FALSE, size=n), color=c("red"))+ #here I put geom_jitter, but geom_point is fine too 
scale_size_continuous(range=c(0.7, 5))+ 
coord_fixed() 
print(a) 

在此先感謝您的幫助!

回答

3

您可以使用ggsave()保存最後的情節和調整用於點/線等的縮放因子試試這個:

ggplot(data = ch2) + 
    geom_polygon(aes(x=long, y=lat, group=group), 
       colour="grey85", fill="grey90") + 
    geom_point(data=datmap, aes(x=E, y=N, group=FALSE, size=n), 
      color=c("red"), alpha = 0.5) + 
    scale_size_continuous(range=c(0.7, 5)) + 
    coord_fixed() + 
    theme_void() 

ggsave(filename = 'plot.pdf', scale = 2, width = 3, height = 3) 

玩的scale參數(以及可選的寬度和高度),直到你對結果感到滿意。

請勿使用geom_jitter():這會爲您的要點添加隨機XY變化。要處理重疊繪圖,您可以嘗試添加透明度 - 我爲此添加了一個alpha參數。我也用theme_void()擺脫軸和背景。

帶有地圖信息的形狀文件非常重要:您可以嘗試使用瑞士州的簡單文件,如this oneenter image description here

+0

非常感謝!我已經使用theme_void了,因爲我想舉一個最簡單的例子,並且感謝州的想法,實際上我用另一個更加複雜的圖形來繪製湖泊和山脈的瑞士形狀,但只是使用以此爲例。但是我的工作稍後可能需要一些州的小區,所以謝謝,我會看看!謝謝你的阿爾法提示。我使用R Sweave,所以更好的選擇是保存繪圖,然後使用'\ includegraphics'將其添加到LaTeX環境中,如果我理解的很好的話?它似乎工作如此,所以非常感謝你! – GaryDe

+1

ggsave是理想的,如果只是想創建一個獨立的文件與您的情節。如果您打算使用Sweave或knitr將圖形嵌入到文檔中,則還可以使用主題選項嘗試調整點的大小,例如, 'theme_void(base_size = 10)' – PeerEZ

+0

謝謝,它工作正常:) – GaryDe