ggplot geom_point随窗口大小而变化

时间:2017-08-11 10:58:06

标签: r ggplot2

我在使用ggplot2创建地图时遇到了一些问题,我使用geom_point投影点。在pdf或其他支持中导出时,点大小会有所不同(因为她是绝对的而不是轴相对的)。我已经搜索了如何更改它并找到了很多答案,说它是有目的的,因为如果不是这样的话,每次轴的改变都会改变为椭圆形。但是,我理解这一点,因为我在地图上工作,我使用coord_fixed来修复输出并避免地图的扭曲,所以如果我能够相对于绘图大小修复点大小,它就不会# 39;这是一个问题。

有没有办法解决这个问题?我已经阅读了一些有趣的事情,建议使用geom_polygon人工创建省略号。但是这个方法有两个问题:

  • 首先,我不知道如何使用我的数据实现这一点,现在我知道我的点的中心所在的位置,但我怎么能说明如何定义所有的中心然后呢?定义一个填充的圆圈多边形?

  • 其次我使用scale_size_continuous相对于其他变量绘制更小或更大的点。我如何使用geom_polygon实现该功能?

Facit:我很高兴有可能覆盖不可能确定点大小的相对单位,或者有一些帮助让我理解如何用函数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)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您可以使用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()来摆脱轴和背景。

包含地图信息的形状文件非常繁重:您可以尝试使用瑞士各州的简单文件,例如this oneenter image description here