我想在高分辨率和低分辨率版本中生成一系列图表,或者使用两种不同的文件类型(.png和.eps)进行不同的说明。我想知道最好/最少重复的方法来做到这一点。我在gplot
中使用了sna
函数,并且绘图在绘图区域外有一个自定义图例。我写了一个像这样的函数:
library(sna)
plotfun <- function(net){
png("test.png",width=800)
p <- gplot(net)
par(xpd=T)
legend(max(p[,1])+1,max(p[,2]),legend=letters[1:10],title="custom legend")
dev.off()
seteps()
postscript(test.eps)
#repeat all the plotting commands, which are much longer in real life
dev.off()
}
#try it with some random data
plotfun(rgraph(10))
这是完美的功能,但似乎效率低,笨拙。这个问题的更一般的版本是:如果出于任何原因我想创建一个图(包括像我的自定义图例这样的额外图层),将它存储为一个对象,然后稍后绘制它,有没有办法做到这一点?顺便说一下,这个问题起初并不是sna
特定的,但是在试图使用plot
的类似函数重现问题时,我无法使图例正确显示,所以这个解决外部情节区域的传奇似乎并不普遍。
答案 0 :(得分:0)
我建议仅在R的Postscript / PDF中生成图形,然后使用例如Postscript / PDF生成位图(例如PNG)。带有-density
参数(http://www.imagemagick.org/script/command-line-options.php#density)的ImageMagick设置适当,以获得所需的分辨率。例如
convert -density 100 -quality 100 picture.pdf picture.png
假设picture.pdf
是7in-by-7in(R默认值)将为您提供700x700 png图片。
使用这种方法,您不必担心图片的格式会有所不同,具体取决于使用哪个R设备(pdf()
vs png()
)。