我试图用循环中的数据绘制一些简单的x,y线图。 代码将生成数百个这样的图,并且想法是将这些图保存在缩略图大小的图像(类似200 x 200像素,DPI无关紧要)中,并将其与数据一起嵌入Excel文件中。当我通过ggplot2进行绘制时,它看起来非常精细,但是当我想保存它时,我得到的裁剪图像只显示图像的一部分,或者是一个非常狭窄的图形,标签/文本的大小不匹配。如果我将比例设为2,那么它看起来是正确的,但不符合我的标准。
我的数据框看起来像这样。
Drug=c("A","A","A","A","A","A")
Con=c(10,100,1000,10,100,1000)
Treatment=c("Dox","Dox","Dox","Pac","Pac","Pac")
Value=c(-3.8,-4.5,-14.1,4,-4.6,3.5)
mat_tbl=data.frame(Drug,Con,Treatment,Value)
p=ggplot(data=mat_tbl,aes(x=Con,y=Value,colour=Treatment,group=Treatment))+geom_point(size = 4)+geom_line()+labs(title="Drug A",x="Concentration",y="Value") + scale_y_continuous(limits=c(-25,125),breaks=seq(-25,125,by=25)) + theme_bw()
ggsave(filename = "curve_drug.png",plot=p,width=2,height=2,units="in",scale=1)
有关我需要处理哪些参数的任何建议?
答案 0 :(得分:4)
请查看我为此编写的函数,作为ggsave
的辅助函数:
plot.save <- function(plot,
width = 800,
height = 500,
text.factor = 1,
filename = paste0(
format(
Sys.time(),
format = '%Y%m%d-%H%M%S'), '-Rplot.png'
)
) {
dpi <- text.factor * 100
width.calc <- width / dpi
height.calc <- height / dpi
ggsave(filename = filename,
dpi = dpi,
width = width.calc,
height = height.calc,
units = 'in',
plot = plot)
}
如您所见,DPI只不过是R中情节的文本因素。
考虑一下:
plot.save(some_ggplot, width = 400, height = 400, text.factor = 1)
这(将text.factor
从1更改为0.5):
plot.save(some_ggplot, width = 400, height = 400, text.factor = 0.5)
两张图片都是400 x 400像素,就像我在函数中设置的一样。
也许有趣:plot.save
的第一个参数是实际的ggplot。所以现在我做了以下可能(使用dplyr
包),我经常使用它:
ggplot(...) %>%
plot.save(200, 200) # here I've set width and height in pixels