我在使用ggplot2
创建 map 时遇到一些问题,在上面我使用geom_point
投影点。当导出为 pdf 或其他支持时,点大小会有所不同(因为她是绝对的,而不是相对于轴的)。我搜索了如何改变它,并找到了很多答案,说这是故意的,因为如果不是这种情况,每次轴比例改变时它都会变成椭圆。然而,我明白,因为我在 map 上工作,所以我使用 coord_fixed 来修复输出并避免 map 扭曲,所以如果我能够相对于绘图大小固定点大小,这不会是一个问题。
有什么解决办法吗?我读过一些有趣的文章,建议使用 geom_polygon 来人为地创建椭圆。但我用这个方法有两个问题:
首先我不知道如何用我的数据实现这一点,现在我知道我的点的中心在哪里,但是我后来怎么能说如何定义所有的中心,然后定义一个周围填充圆形多边形?
其次,我使用了
scale_size_continuous
来绘制相对于其他变量较小或较大的点。我如何使用geom_polygon
来实现它?
事实:我很高兴能够覆盖无法确定点大小的相对单位的可能性,或者提供一些帮助让我了解如何使用函数geom_polygon<创建相同的东西
.
我尝试在这里加入一个可重现的小示例。这只是一个例子,我的数据的问题是我有很多封闭的小值(主要是1,就像可重现示例中的小点),所以它们看起来真的很好,但是导出时它可能会变得很大并通过过度绘制产生很多问题,这就是我需要修复这个比率的原因。
Link for the map informations和 second link for map informations
dat <- data.frame(postcode=c(3012, 2000, 1669, 4054, 6558), n=c(1, 20, 40, 60, 80))
ch <- read.csv("location/PLZO_CSV_LV03/PLZO_CSV_LV03.csv", sep=";")#first link, to attribute a geographical location for each postcode
ch <- ch%>%
distinct(PLZ, .keep_all=TRUE)%>%
group_by(PLZ, N, E)%>%
summarise
ch <- ch%>%
filter(PLZ %in% dat$postcode)
ch <- ch%>%
arrange(desc(as.numeric(PLZ)))
dat <- dat%>%
arrange(desc(as.numeric(postcode)))
datmap <- bind_cols(dat, ch)
ch2 <- readOGR("location/PLZO_SHP_LV03/PLZO_PLZ.shp")#second link, to make the shape of the country
ch2 <- fortify(ch2)
a <- ggplot()+
geom_polygon(dat=ch2, aes(x=long, y=lat, group=group), colour="grey75", fill="grey75")+
geom_jitter(data=datmap, aes(x=E, y=N, group=FALSE, size=n), color=c("red"))+ #here I put geom_jitter, but geom_point is fine too
scale_size_continuous(range=c(0.7, 5))+
coord_fixed()
print(a)
预先感谢您的帮助!
最佳答案
您可以使用ggsave()
保存最后一个绘图并调整用于点/线等的缩放因子。试试这个:
ggplot(data = ch2) +
geom_polygon(aes(x=long, y=lat, group=group),
colour="grey85", fill="grey90") +
geom_point(data=datmap, aes(x=E, y=N, group=FALSE, size=n),
color=c("red"), alpha = 0.5) +
scale_size_continuous(range=c(0.7, 5)) +
coord_fixed() +
theme_void()
ggsave(filename = 'plot.pdf', scale = 2, width = 3, height = 3)
尝试使用 scale
参数(以及可选的宽度和高度),直到您对结果感到满意为止。
请勿使用geom_jitter()
:这将为您的点添加随机 XY 变化。要处理过度绘制,您可以尝试添加透明度 - 我为此添加了一个 alpha 参数。我还使用 theme_void()
来摆脱轴和背景。
包含 map 信息的形状文件相当重:您可以尝试使用瑞士各州的简单形状文件,例如 this one 。
关于r - ggplot geom_point随窗口大小变化大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45633539/