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