R ggplot ggsave 产生不同的绘图元素大小,而不是简单地在 RStudio 中导出

Posted

技术标签:

【中文标题】R ggplot ggsave 产生不同的绘图元素大小,而不是简单地在 RStudio 中导出【英文标题】:R ggplot ggsave produces different plot element sizes than simply exporting in RStudio 【发布时间】:2017-06-21 20:06:03 【问题描述】:

使用ggsave() 导出绘图时,与在 R Studio 中查看和导出绘图时相比,我的 ggplot 的几乎所有元素(尤其是文本)都被放大了。我使用ggsave() 的原因是为了获得出版所需的 300 dpi 和 85mm 宽度。

如何确保ggsave() 输出与 RStudio 导出的内容相匹配?

1. RStudio 导出(正确比例):

2。 ggsave() 导出(比例不正确):

3.我的代码

library(ggplot2)
library(cowplot)
library(grid)

# Make plot
fig4 <- ggplot()
# Add Landings lines
fig4 <-
  fig4 + geom_line(
    data = NorRus,
    aes(year, tonnes, color = fishing_entity),
    size = 0.75
    )
# Change colors. 
fig4 <-
  fig4 + scale_color_manual(
    values = bluesPalette,
    name = NULL
    )
# adjust y axis labels, remove scientific notation
fig4 <-
  fig4 + scale_y_continuous(
    expand = c(0,0), #removes stupid gap btwn plot & axes
    breaks = seq(0, 2500000, 500000),
    limits = c(0, 2500000),
    labels = divide1000() # divide units by 1000 w function specified above 
  )
# adjust x axis labels
fig4 <-
  fig4 + scale_x_continuous(
    expand = c(0,0), # removes stupid gap btwn plot & axes
    breaks = seq(1950, 2014, 10),
    limits = c(1950, 2014)
  )
# Add titles to axes
fig4 <- 
  fig4 + labs(
    y = Land10e3,
    x = "Year"
  )
# Adjust axis margins
fig4 <- 
  fig4 + theme(
    axis.title.y=element_text(margin=margin(0,20,0,0)),
    axis.title.x=element_text(margin=margin(20,0,0,0))
  )
# Adjust text sizes
fig4 <- 
  fig4 + theme(
    legend.title=element_text(size=10), # Legend title
    legend.text=element_text(size=8), # Legend items
    axis.title=element_text(size=10), # Axis titles
    axis.text=element_text(size=8) # Axis labels
  )
# move legend to inside
fig4 <- 
  fig4 + theme(
    legend.justification = c(1, 1), 
    legend.position = c(1, 1)
  )
# Plot
plot(fig4)

# Export plot w ggsave
ggsave(
  "R exports/fig4-ggsave.tiff",
  plot = fig4, 
  device = "tiff", 
  dpi=150, 
  width=85, 
  height=53, 
  units = "mm"
  )

我怀疑我的问题与 element_text() 以点为单位有关,而我用 ggsave() 指定的单位以毫米为单位。

这两个问题非常接近帮助我解决我的问题,但我不太知道如何将它们作为解决方案实施!

    ggplots2 ggsave text size not changing ggplot geom_text font size control

【问题讨论】:

【参考方案1】:

更改这些参数:

width=85, maybe to 850
height=53, maybe to 530

使用绘图的宽度和高度进行操作将为您提供所需的输出。

【讨论】:

产生这个:imgur.com/a/EO4pG 不幸的是,我还必须保持 85 毫米的宽度以满足出版要求。我想我总是可以在 R 中弄乱宽度和高度,直到它看起来不错,然后在 R 之外调整它的大小,但这很hacky。 好的,所以我的 hacky 解决方法是:width=85 * (14/5), height=53 * (14/5), 这是我在第二个链接问题中提供的比率。因此,在出现更好的情况之前,我将这个比率应用于我所有的 ggsave,然后在外部程序中将大小调整为 85 毫米。 @spops 我的论文情节也有同样的问题。很长一段时间后,我厌倦了代码并开始手动导出绘图(导出->另存为图像->设置宽度和高度直到它看起来不错->在最终文档中调整照片大小)如果绘图很少,它并不像它那么糟糕似乎:) 但我也想看看解决这个问题的更好方法。【参考方案2】:

(根据我对 Piotr 的回答的评论):我的 hacky 解决方法是:width=85 * (14/5), height=53 * (14/5),这是我在第二个链接问题中提供的比率。因此,在出现更好的情况之前,我将这个比率应用于我所有的 ggsave,然后在外部程序中将大小调整为 85 毫米。

【讨论】:

以上是关于R ggplot ggsave 产生不同的绘图元素大小,而不是简单地在 RStudio 中导出的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化使用ggsave将可视化图像结果保存为SVG文件实战

R语言ggplot2可视化使用ggplot2::ggsave函数和gridextra::marrangegrob函数将多个可视化结果保存在pdf文件中

在 R Shiny 的表中插入 ggplot barplot

在 Windows 上具有抗锯齿和 wmf 格式的 R ggplots

无法从通过 ggsave() 生成的 PNG 中删除灰色背景

以 EPS 格式保存 ggplot 以在 Adob​​e Illustrator 中进行编辑——文本问题