2017-04-16 94 views
1

下面的數據表示與相關的收入了一些地理點的:是否可以創建可以自動調整大小的點?

df1 <- data.frame(lat = c(36.75, 46.21, 32.31, 29.5, 35.46), long = c(-88.79, -97.8, -106.79, -82.28, -97.51), revenue = c(15000, 10000, 4000, 30000, 12000)) 

以下代碼繪製在地圖上的點:

plot(map, xlim = c(-130, -65), ylim = c(35,40), asp = 1) 
points(df1$long, df1$lat, col="red", pch=16, cex=0.0003*df1$revenue) 

爲了創建上述地圖,我已經取得「cex」同等收入* 0.0003。

由於我處理的收入數量很大,因此我需要將該值乘以極小的一部分,以便使地圖在視覺上適合。

是否可以自動確定點的大小,以便可以簡單地輸入「1」,「2」,「3」等,以便點將自動調整到自然尺寸?在現狀中,我不得不擺弄極少數人才能完成這項工作。

(僅供參考,我在想沿着GGPLOT2情節的「大小」功能線的東西。)

+1

東西就像'scale :: rescale'? – rawr

+0

@StephenKaroly:只要你明白了,rawr的建議就需要'scales'包。修改現有的繪圖將涉及用更高的cex重繪繪製點。 –

回答

0

您可以限制cex值在一定範圍這樣內。我不熟悉scales::rescale從評論,但也許這是同樣的事情

# set the minimum and maximum cex values 
cex_min <- 1 
cex_max <- 4 

df1 <- data.frame(lat = c(36.75, 46.21, 32.31, 29.5, 35.46), long = c(-88.79, -97.8, -106.79, -82.28, -97.51), revenue = c(15000, 10000, 4000, 30000, 12000)) 

df1$revenue2 <- df1$revenue - min(df1$revenue) 
df1$proportion <- df1$revenue2/max(df1$revenue2) 
df1$cex_val <- cex_min + df1$proportion * (cex_max - cex_min) 

plot(map, xlim = c(-130, -65), ylim = c(35,40), asp = 1) 
points(df1$long, df1$lat, col="red", pch=16, cex=df1$cex_val) 
相關問題