是否可以创建使用cex自动调整大小的点?

时间:2017-04-16 23:30:31

标签: r mapping cex

以下数据代表了许多具有相关收入的地理点:

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 个答案:

答案 0 :(得分: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)