使用ggplot2时出现持续的无效图形状态错误

152

我相信我的数据框和代码都没问题。实际上,为了让事情变得尽可能简单,我已经删除了数据框的某些部分以及大部分绘图代码。但是,我仍然会遇到:

Error in .Call.graphics(C_palette2, .Call(C_palette2, NULL)) : 
  invalid graphics state

这里有什么问题吗?以下是数据:

 date   trt var val
1/8/2008    cc  sw5 0.2684138
1/8/2008    cc  sw15    0.2897586
1/8/2008    cc  sw5 0.2822414
2/8/2008    cc  sw5 0.2494583
2/8/2008    cc  sw5 0.2692917
2/8/2008    cc  sw15    0.2619167
2/8/2008    cc  sw5 0.204375
3/8/2008    cc  sw5 0.2430625
3/8/2008    cc  sw5 0.2654375
3/8/2008    cc  sw5 0.2509583
3/8/2008    cc  sw5 0.2055625
1/8/2008    ccw sw15    0.2212414
1/8/2008    ccw sw5 0.3613448
1/8/2008    ccw sw5 0.2607586
2/8/2008    ccw sw5 0.2087917
2/8/2008    ccw sw15    0.3390417
2/8/2008    ccw sw5 0.2436458
2/8/2008    ccw sw5 0.290875
3/8/2008    ccw sw5 0.20175
3/8/2008    ccw sw15    0.328875
3/8/2008    ccw sw5 0.2328958
3/8/2008    ccw sw5 0.2868958

当我使用这些数据时,我会像这样指定日期:

df<-df[order(as.Date(df$date,format="%d/%m/%Y")),,drop=FALSE]

接下来我想制作一个散点图:

ggplot(data = df,aes(x = date,y = val)) + 
 geom_point(aes(group = trt))

4
你尝试过(重新)安装ggplot2吗? - Paul Hiemstra
我将此作为答案添加,这样其他人就可以更容易地找到答案。您可以通过点击我的答案旁边的勾号来接受答案。只是确认一下,您最初安装了 ggplot2 吗? - Paul Hiemstra
是的,它已经安装好了。 - Nazer
6
重新启动 R 会话解决了我的问题。 - Chris
请注意 - 如果您尝试构建使用过小的图形尺寸(例如,尝试在未指定单位的情况下提供英寸尺寸),也可能会出现此问题。 - Keith Hughitt
8个回答

443

我遇到了同样的错误并通过运行以下命令解决:

dev.off()

然后再次运行绘图。我认为之前导出某些图形有些问题,导致绘图设备出了问题,并没有重置。这对我很有效,而且比重新安装ggplot2更简单。


2
这解决了问题,但您有任何想法为什么会这样吗? - Pedro Cavalcante
2
@PedroCavalcanteOliveira 我也遇到过这个问题,当我在之前使用了 par(mfrow = c(..., ...)) 时。不知道其他图形参数是否会导致此问题。 - loki
1
它有所帮助,但它是做什么的? - vasili111
1
运行graphics.off()对我也有效。根据R文档,"graphics.off()关闭所有打开的图形设备。" - rturquier

12

我发现当您在同一会话中混合使用ggplot图表和plot图表时,会出现这种情况。使用Paul建议的“dev.off”解决方案可以解决这个问题。


2
dev.off 是用来做什么的? - vasili111
它关闭当前的图形设备。 - mirh

10
解决方案是简单地重新安装 ggplot2。也许你使用的 R 版本与你安装的 ggplot2 版本不兼容。或者,在早期安装 ggplot2 时出现了问题,导致你所看到的问题。

4
感谢您将这个答案留在这里。虽然另一个答案更简单,但dev.off()对我并不起作用,重新安装ggplot2是一个不错的备选方案。 - Nazer
1
最好先尝试使用dev.off(),比重新安装软件包所需的时间更短。如果dev.off()无效,则可以作为第二步尝试重新安装软件包。 - Jason Goal

4
您很可能不需要重新安装ggplot2
解决方案:回到之前无法工作的图形上。以下面的控制台输出为例。图形边距(显示图形的窗口)太小,无法显示pairs(MinusInner)绘图。然后,当我尝试进行下一个qplot时,R仍然卡在以前的错误上。 我通过扩展绘图窗口并重新运行pairs(MinusInner)绘图来修复第一个错误。然后就搞定了。

pairs(MinusInner) qplot(Sample.Type, BAE,data=MinusInner, geom="boxplot")


1

我通过清除控制台中的所有图形,然后确保绘图区域足够大以容纳我创建的内容来解决了这个问题。


1

重新启动R(菜单>Sessions>Restart R或⌘⇧F10)并重新运行我的代码解决了问题。


1

另外,如果您使用的是RStudio,一个简单的解决方法是通过拖动窗口来扩大绘图窗口/区域的大小。基本上,这个问题是因为您当前的绘图窗口比需要显示绘图的大小要小所导致的。


0
尝试使用 x11()win.graph() 来获取图形,并解决这个问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接