无法调整图形窗口的大小?光标无限旋转?

时间:2015-07-08 02:42:33

标签: r ggplot2

我有以下内容:

require(ggplot2)

p <- ggplot()   # don't put aes() here, do it separately

df <- data.frame(x=X, y=Y)    # ggplot requires dataframes
p <- p + geom_line(data=df, aes(x=X, y=Y))

# Now we plot the graphs using ggplots and color the segments
p <- p + geom_rect(data=peaks,
                   aes(xmin=xstart, xmax=xend,
                       ymin = -Inf, ymax = Inf,
                       fill = col),
                   alpha=0.4)

# Open the graphical window for displaying the graph
quartz()
print(p)
message("Press Return To Continue")
invisible(readLines("stdin", n=1))

最后一行确保我的图形窗口在脚本终止时不会打开和关闭。这样可以正常工作,除了我在显示时无法调整图形窗口的大小。我的光标无限旋转。

除了在quartz()中手动指定窗口框架外,还有什么办法可以调整图形窗口的大小吗?

1 个答案:

答案 0 :(得分:2)

这是here的暗示。

使用readLines()(对于基础图)或locator()(对于grid::grid.locator()),而不是使用ggplot2来保持R脚本等待。这不仅可以保持脚本运行,还可以使绘图窗口保持活动状态并可调整大小。在Windows上,这对我有用:

library(ggplot2)

X11() #quartz() on OSX
ggplot(mtcars, aes(mpg, wt)) + geom_line()
grid::grid.locator()

或者

X11() #quartz() on OSX
plot(mtcars$mpg, mtcars$wt)
locator()

locator()grid::grid.locator()之间的特殊区别在于,第一个将允许您选择任意数量的点,而第二个只允许一个点,如果您错过了点击,可能会导致图表关闭。你可以找到here的替代品,或者只是使用replicate(10, grid::grid.locator())之类的东西。

修改

这是一个修改,应该修复评论中提到的两个问题。

我们可以在图形设备处于活动状态时使系统休眠,而不是readLines()locator()。由于窗口关闭后设备应更改回null device,我们可以将其作为条件使用:

library(ggplot2)

X11() #quartz() on OSX
ggplot(mtcars, aes(mpg, wt)) + geom_line()

while(dev.cur() != 1) Sys.sleep(1)
print("Still running".)

我认为这适用于任何操作系统,但另一个(特定于操作系统)选项类似于while(names(dev.cur()) == "windows")