在ggplot2中协调适当大小的点

时间:2014-07-13 18:41:30

标签: r ggplot2

我已从此文件中的数据中采样了10,000个坐标。我有大约130,000分。

https://www.dropbox.com/s/40hfyx6a5hsjuv7/data.csv

我正在尝试使用ggplot2在美洲地图上绘制这些点。这是我的代码。

library(ggplot2)
library(maps)

map_world <- map_data("world")
map_world <- subset(map_world, (lat >= -60 & lat <= 75))
map_world <- subset(map_world, (long >= -170 & long <= -30))

p <- ggplot(data = data_coords, legend = FALSE) +
geom_polygon(data = map_world, aes(x = long, y = lat, group = group)) +
geom_point(aes(x = lon, y = lat), shape = 19, size = 0.00001,
           alpha = 0.3, colour = "red") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text.x = element_blank(),axis.text.y = element_blank()) +
theme(axis.ticks = element_blank()) +
xlab("") + ylab("")

png("my_plot.png", width = 8000, height = 7000, res = 1000)
print(p)
dev.off()

enter image description here

这些要点似乎涵盖了绘制它们的整个区域。我希望它们更小,以更好地代表一个位置。你可以看到我将大小设置为0.00001。我只是试图看看它是否有任何影响,但它在某个限制后似乎没有帮助。这是最好的解决方案,还是可以减少更多?

我实际上已经绘制了大约400,000个点,但之前只在美国地图上,它们看起来好像下面的情况。希望得到这样的东西。感谢。

https://www.dropbox.com/s/8d0niu9g6ygz0wo/Clusters_reduced.png

1 个答案:

答案 0 :(得分:0)

尝试使用非常小的alpha值,而不是点大小:

http://docs.ggplot2.org/0.9.3.1/geom_point.html

# Varying alpha is useful for large datasets
d <- ggplot(diamonds, aes(carat, price))
d + geom_point(alpha = 1/1000)

修改

文档中提供了其他想法。这是一个总结:

<强>详情

散点图对于显示两个连续变量之间的关系非常有用,尽管它也可以与一个连续变量和一个分类变量或两个分类变量一起使用。有关可能性,请参阅geom_jitter

气泡图是一个散点图,第三个变量映射到点的大小。但是,对于散点图没有特殊名称,其中另一个变量映射到点形状或颜色。

散点图最大的潜在问题是过度绘图:每当有多个点时,点可能会相互叠加。这会严重扭曲情节的视觉外观。这个问题没有一个解决方案,但有一些技术可以提供帮助。您可以使用stat_smoothstat_quantilestat_density2d添加其他信息。如果您有很少的唯一x值,geom_boxplot也可能有用。或者,您可以使用stat_sum汇总每个位置的点数并以某种方式显示该点数。

另一种技术是使用透明点geom_point(alpha = 0.05)。

编辑2:

将手册中的详细信息与Transparency and Alpha levels for ggplot2 stat_density2d with maps and layers in R

中的提示相结合

这可能看起来像解决方案:

library(ggplot2)
library(maps)

data_coords <- read.csv("C:/Downloads/data.csv")

map_world <- map_data("world")
map_world <- subset(map_world, (lat >= -60 & lat <= 75))
map_world <- subset(map_world, (long >= -170 & long <= -30))

p <- ggplot(     data = data_coords, legend = FALSE) +
 geom_polygon(   data = map_world, aes(x = long, y = lat, group = group)) +
 stat_density2d( data = data_coords, aes(x=lon, y=lat, fill = as.factor(..level..)), size=1, bins=10, geom='polygon') +
 scale_fill_manual(values = c("yellow","red","green","royalblue", "black","white","orange","brown","grey"))

png("my_plot2k.png", width = 2000, height = 2000, res = 500)
print(p)
dev.off()

产生的图像(不是最佳使用的调色板):

Contour-Plot-Image