我对R中的数据处理有疑问。我有两个数据集。两者都是.csv文件。 我准备了两个示例数据集:
表A - 人员
http://pastebin.com/HbaeqACi
表B - 城市
http://pastebin.com/Fyj66ahq
尽可能少地使用相应的R代码进行加载和可视化。
# Read csv files
# check pastebin links and save content to persons.csv and city.csv.
persons_dataframe = read.csv("persons.csv", header = TRUE)
city_dataframe = read.csv("city.csv", header = TRUE)
# plot them on a map
# load used packages
library(RgoogleMaps)
library(ggplot2)
library(ggmap)
library(sp)
persons_ggplot2 <- persons_dataframe
city_ggplot2 <- city_dataframe
gc <- geocode('new york, usa')
center <- as.numeric(gc)
G <- ggmap(get_googlemap(center = center, color = 'color', scale = 4, zoom = 10, maptype = "terrain", frame=T), extent="panel")
G1 <- G + geom_point(aes(x=POINT_X, y=POINT_Y ),data=city_dataframe, shape = 22, color="black", fill = "yellow", size = 4) + geom_point(aes(x=POINT_X, y=POINT_Y ),data=persons_dataframe, shape = 8, color="red", size=2.5)
plot(G1)
因此,我有一张地图,可以照亮所有城市和人 我的问题:所有人只在这三个城市分发。
我的问题:
geom_text
选项来实现这一点,但我无法弄清楚如何在某个位置总结所有点并将其写入标签。希望这些问题不是太多 任何帮助深表感谢。提前谢谢!
Btw:准备包含示例数据集的问题有没有更好的帮助?我应该在某个地方上传文件还是以pastebin方式好吗?答案 0 :(得分:2)
您可以通过计算每个城市中的数字并将点的大小映射到计数来创建气泡图:
library(plyr)
persons_count <- count(persons_dataframe, vars = c("city", "POINT_X", "POINT_Y"))
G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red")
您可以将计数映射到点的区域,这可能更好地了解相对大小:
G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red") +
scale_size_area(breaks = unique(persons_count$freq))
您可以添加频率标签,但这对于尺寸比例图例来说有点多余:
G + geom_point(aes(x=POINT_X, y=POINT_Y, size=freq),data=persons_count, color="red") +
geom_text(aes(x = POINT_X, y=POINT_Y, label = freq), data=persons_count) +
scale_size_area(breaks = unique(persons_count$freq))
您无法使用示例数据绘制密度,因为您只有三个点。但是如果您有更细粒度的位置信息,您可以使用ggplot2中的stat_density2d
函数计算并绘制密度。