ast*_*nes 7 png r file ggplot2
我正在问这个经常被问及回答问题的小砖墙,但不是微不足道的砖墙.
我在Linux上使用Rstudio 0.97.336和R 3.0.0.我正在制作一个(更复杂的)图表来填写论文.标题和x/y标签的默认大小太小,无法轻松阅读.然而,如果我将图像保存为PNG文件,使用element_text主题上的主题函数(axis.title.y = element_text(size = rel(1.8))修复此问题的明显方法不起作用.但它确实有效正如预期的那样,当我在看RStudio中的图像时.下面的代码完全重现了我的问题.
##Libraries
library(ggplot2)
set.seed(15612)
##Generate data
Year <- seq(2000,2010)
data <- -2*(Year - 2005) + 10 + runif(11,min=-3,max=3)
Title <- "Title for our graph"
xlab <- "X label"
ylab <- "Y label"
df <- data.frame(Year,data)
##Plot
##First image with small title, xlab, ylab
image1 <- ggplot(df) +
geom_line(aes(x=Year,y=data)) +
theme_bw() +
labs(title=Title,xlab=xlab,ylab=ylab)+
theme(panel.border = element_rect(fill = NA, colour="grey70"))
image1
ggsave("Image1.png",image1, width=15,height=10,units='cm')
##Second image with larger title, xlab, ylab
image2 <- image1 +
theme(axis.title.y = element_text(size = rel(1.8), angle = 90)) +
theme(axis.title.x = element_text(size = rel(1.8), angle = 00)) +
theme(plot.title = element_text(size = rel(2.0), angle = 00))
image2
ggsave("Image2.png",image2, width=15,height=10,units='cm')
dev.off()
image1
image2
Run Code Online (Sandbox Code Playgroud)
这些图像在Rstudio的屏幕上看起来与预期完全一致.图像1具有用于标题等的小字体大小,并且图像2具有更大的更清晰的字体大小.不幸的是,当保存为png文件时,它们是相同的,并且两者都有标题,x和y标签的小字体.
我不能(还)发布图片,所以如果你看看这两个网址,你会发现问题所在.
我无法看到我误入歧途的地方.我知道在ggplot2中有懒惰评估存在问题(或功能!),但是我没有看到这在哪里咬我.我将非常感谢任何帮助,
问候,
安东尼斯坦斯
使用 RStudio,我还看到一些奇怪的行为(但我需要更多地查看文档来确定它是否不符合我们的预期),但是,我认为您可以通过调用 来获得您期望的输出ggsave,让它使用它的默认值plot = last.plot(),然后运行绘图,然后dev.off()在绘图之间调用。IE
ggsave("~/Image1.png", width=15,height=10,units='cm')
image1
dev.off()
ggsave("~/Image2.png", width=15,height=10,units='cm')
image2
dev.off()
Run Code Online (Sandbox Code Playgroud)
如果我们在 RStudio 中尝试以下示例,我可以获得与 OP 相同的行为。在 3.0.0 中运行下面的第一个代码块RGui给出了我们所期望的,即第三张图片。然而,这就是 RStudio 中发生的情况:
## Make plot and save
qp <- qplot(1:5, rnorm(5), size = I(2) )
qp
ggsave("~/Image1.png", width=15,height=10,units='cm')
## Make new plot
qp <- qplot(1:10, rnorm(10), size = I(5) )
qp
ggsave("~/Image2.png", width=15,height=10,units='cm')
Run Code Online (Sandbox Code Playgroud)
此时,如果我们尝试打开保存的文件,我们会得到:

然后我们就跑dev.off()
## Without calling dev.off() plot 1 is still open and displays nothing
## Plot two is accessible from the filesystem
## Calling dev.off() we then get both plots, but BOTH plots
## use settings from plot 2
dev.off()
Run Code Online (Sandbox Code Playgroud)
我们得到:

现在,如果我们尝试通过调用ggsave然后将绘图打印到屏幕然后调用 dev.off() 来保存绘图,它将按预期工作:
## Now we try calling dev.off() between plots:
qp <- qplot(1:5, rnorm(5), size = I(2) )
ggsave("~/Image1.png", width=15,height=10,units='cm')
qp
dev.off()
## Make new plot
qp <- qplot(1:10, rnorm(10), size = I(5))
ggsave("~/Image2.png", width=15,height=10,units='cm')
qp
dev.off()
Run Code Online (Sandbox Code Playgroud)
然后我们得到:
