2017-04-16 93 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) 
相关问题