【问题标题】:R: Saving a graph with ggsave after using north2() to create map with north arrowR:使用north2()创建带有指北针的地图后,使用ggsave保存图形
【发布时间】:2018-10-10 19:47:26
【问题描述】:

我对 R 非常陌生,因此我们将不胜感激任何帮助!我想用指北针保存我的地图,在我创建它之后,使用 ggsave 函数。但是,在我的地图中,我使用 ggsn 包中的函数 north2() 并且它只保存地图而不是指北针。我知道我可能遗漏了一些非常简单的东西,但我似乎无法弄清楚。我究竟做错了什么??提前致谢。

graph1<-ggplot()+
  geom_polygon(data=df,colour="black",aes(x=long,y=lat,group=group,fill=ALG))+
  ggtitle("Figure 2.2A: Assessment Results for\nGeneral Aquatic Life Use, Spatial Extent")+
  xlab("")+
  ylab("")+
  coord_equal()+
  coord_fixed(ratio = 1)+
  ggsn::scalebar(df,location="bottomleft",dist = 50,st.dist=0.02,st.size=3, height=0.01)+
  scale_fill_manual("Aquatic Life Designated\nUse 2014 Assessment",values=c((values=c(colors))))+
  cowplot::background_grid(major= "none",minor = "none") +
  theme(axis.text.x = element_blank(), axis.ticks.x = element_blank(),
        axis.text.y = element_blank(), axis.ticks.y = element_blank(),
        axis.line = element_blank(),
        panel.background = element_blank(),
        legend.position=c(0.8,0.1),
        panel.border = element_rect(fill=NA),
        legend.background = element_blank(),
        legend.text = element_text(size=7),
        legend.title = element_text(colour="black", size=8, face="bold"),
        plot.title=element_text(size=15, face="bold",vjust=1.0,hjust = .3))

ggsave(file="Figure 2.2A.pdf",width=11.5,height=8)
north2(graph1, x = 0.73, y = 0.89, scale = 0.1, symbol = 3)
dev.off()

【问题讨论】:

  • 代码看起来只是保存地图,而不是指北针,但如果没有可重现的数据,我们无法测试以了解实际发生的情况。不过,我有一个好主意,我将把它作为答案发布。
  • @Aaron 对不起,这就是我的意思!它会保存地图,但不会保存指北针。
  • 尝试将north2 命令移到ggsave 之前。而且我认为你不需要dev.off()
  • @Lyngbakr,我一开始也是这么想的,但north2 是一个有趣的变体,它没有通常的 ggplot 行为。
  • @Aaron 啊,我明白了。

标签: r ggplot2 maps


【解决方案1】:

您需要使用基本函数pdf 而不是ggsave

pdf(file="Figure 2.2A.pdf",width=11.5,height=8)
north2(graph1, x = 0.73, y = 0.89, scale = 0.1, symbol = 3)
dev.off()

这是因为north2 函数的工作方式有点不标准;它绘制结果图而不是返回它。在帮助中解释了为什么存在这种变体。

普通的north函数更标准;您可以将其添加到您的情节中,例如

graph1 + north(data=df, ...)

然后您可以按预期使用ggsave 函数(但在此之后,而不是之前)。

请注意,对于传统绘图,您首先使用pdf() 打开文件,然后运行绘图代码,然后使用dev.off 关闭文件;但对于 ggplots,您先制作绘图,然后调用 ggsave,不需要 dev.off

【讨论】:

  • 感谢详细的解释!作为编码和 R 的新手,这样的小事让我感到困惑。
猜你喜欢
  • 2013-08-26
  • 1970-01-01
  • 2013-06-25
  • 2020-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
相关资源
最近更新 更多