7

对于这个经常被问到和回答的问题,我正在撞到一堵小但并非微不足道的砖墙。

我在 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

这些图像在 Rstudio 的屏幕上看起来完全符合预期。图像 1 的标题等字体较小,而图​​像 2 的字体更大更易读。不幸的是,当保存为 png 文件时,它们是相同的,并且标题、x 和 y 标签都有小字体。

我(还)不能发布图片,所以如果你看看这两个网址,你会发现问题。

图 1 - 小标题字体

图 2 - 仍然是一个小标题字体,但应该更大

我看不到我会误入歧途。我知道 ggplot2 中存在延迟评估的问题(或功能!),但我看不出这对我有什么影响。对于这方面的任何帮助,我将不胜感激,

问候,

安东尼·斯坦斯

4

1 回答 1

3

使用 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()

此行为的可重现示例

如果我们在 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')

此时,如果我们尝试打开保存的文件,我们会得到: 在此处输入图像描述

然后我们就跑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()

我们得到: 在此处输入图像描述

现在,如果我们尝试通过调用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()

然后我们得到: 在此处输入图像描述

于 2013-05-06T13:53:37.363 回答