r - ggplot geom_point随窗口大小变化大小

标签 r ggplot2

我在使用ggplot2创建 map 时遇到一些问题,在上面我使用geom_point投影点。当导出为 pdf 或其他支持时,点大小会有所不同(因为她是绝对的,而不是相对于轴的)。我搜索了如何改变它,并找到了很多答案,说这是故意的,因为如果不是这种情况,每次轴比例改变时它都会变成椭圆。然而,我明白,因为我在 map 上工作,所以我使用 coord_fixed 来修复输出并避免 map 扭曲,所以如果我能够相对于绘图大小固定点大小,这不会是一个问题。

有什么解决办法吗?我读过一些有趣的文章,建议使用 geom_polygon 来人为地创建椭圆。但我用这个方法有两个问题:

  • 首先我不知道如何用我的数据实现这一点,现在我知道我的点的中心在哪里,但是我后来怎么能说如何定义所有的中心,然后定义一个周围填充圆形多边形?

  • 其次,我使用了 scale_size_continuous 来绘制相对于其他变量较小或较大的点。我如何使用geom_polygon来实现它?

事实:我很高兴能够覆盖无法确定点大小的相对单位的可能性,或者提供一些帮助让我了解如何使用函数geom_polygon<创建相同的东西.

我尝试在这里加入一个可重现的小示例。这只是一个例子,我的数据的问题是我有很多封闭的小值(主要是1,就像可重现示例中的小点),所以它们看起来真的很好,但是导出时它可能会变得很大并通过过度绘制产生很多问题,这就是我需要修复这个比率的原因。

Link for the map informationssecond 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 oneenter image description here

关于r - ggplot geom_point随窗口大小变化大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45633539/

相关文章:

javascript - Shiny 的 R : How to save list of checkbox inputs from datatable?

r - 在 r 中使用跨组聚合的加权平均值

r - ggplot2 - 删除面板顶部边框

r - ggplotly 和 facet_wrap 的 X 轴错误

r - r中的人口金字塔密度图

r - 使用ggplot2微调森林图

r - 如何根据特定序列中出现的值对列进行变异?

r - 用 R 绘制直方图; y轴从比例/概率不断变化到频率

r - R 中的两个 for 循环

r - 不同组中具有重复元素的 Lollipop 图表