我在Jupyter笔记本中使用%%R
单元格魔法。我知道您可以设置每个单元格的绘图大小,例如:
%%R -w 800 -h 600
但我想为整个笔记本/ R会话设置默认值。
我看过How to only include a framework when building for device, not iOS Simulator?,看过the documentation,看过this blog post on the R Jupyter Notebook Kernel关于按单元格设置绘图大小,但除非我遗漏了明显的东西,否则没有似乎是一种为R magics中的绘图设置默认绘图大小的方法。
这可能吗?是否有隐藏设置,或者必须为每个单元格单独设置-w
和-h
?
答案 0 :(得分:0)
好问题。目前我认为默认设置是R默认设置,但使用jyputer默认设置是有意义的(如果有的话 - 我需要查看它)。
以下黑客行事......如果" R magic"正在使用R中的默认绘图设置。不幸的是它没有。
%%R
my_png <- function(...) {
lst <- as.list(...)
if (is.null(lst$w)) {
lst$w <- 1000 # default width
}
if (is.null(lst$h)) {
lst$h <- 700 # default height
}
do.call("png", lst)
}
options(device=my_png)
在bitbucket上的rpy2跟踪器上打开一个问题以请求该功能是有意义的。
答案 1 :(得分:0)
古老的问题,但我也有同样的想法,找到了该页面,然后设法抓了一下,因此希望这对某人有用。
解决方法是猴子补丁rpy2
,它直接调用R的png
方法,而没有设置默认参数的方法。请注意,这种方法通常是 Bad Idea ,而且很脆弱,但无法避免。向rpy2
发出功能请求以包含默认参数的机制可能是值得的。
下面是猴子补丁:
# these are the defaults we want to set:
default_units = 'in' # inch, to make it more easily comparable to matpplotlib
default_res = 100 # dpi, same as default in matplotlib
default_width = 10
default_height = 9
# try monkey-patching a function in rpy2, so we effectively get these
# default settings for the width, height, and units arguments of the %R magic command
import rpy2
old_setup_graphics = rpy2.ipython.rmagic.RMagics.setup_graphics
def new_setup_graphics(self, args):
if getattr(args, 'units') is not None:
if args.units != default_units: # a different units argument was passed, do not apply defaults
return old_setup_graphics(self, args)
args.units = default_units
if getattr(args, 'res') is None:
args.res = default_res
if getattr(args, 'width') is None:
args.width = default_width
if getattr(args, 'height') is None:
args.height = default_height
return old_setup_graphics(self, args)
rpy2.ipython.rmagic.RMagics.setup_graphics = new_setup_graphics