Можно ли создавать точки, которые автоматически изменяют размеры с помощью 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" и т. Д. Таким образом, чтобы точки автоматически изменили размер до естественного размера? В статус-кво, я должен возиться с очень маленькими числами, чтобы сделать эту работу.

(Для справки я думаю о чем-то вроде функции "size" графика в ggplot2.)

1 ответ

Вы можете ограничить 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)
Другие вопросы по тегам