以下数据表示与收入相关的多个地理点:
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的分数,以便使地图在视觉上顺从。
有没有可能自动调整这些点的大小,只需输入“1”、“2”、“3”等,这些点就会自动调整到自然大小?在目前的情况下,我不得不摆弄极小的数字来使其工作。
(作为参考,我正在考虑类似于ggplot2中绘图的“size”函数的内容。)
发布于 2017-04-17 09:05:49
您可以将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)https://stackoverflow.com/questions/43443253
复制相似问题