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

Posted

技术标签:

【中文标题】使用 ggplot2 时持续出现无效的图形状态错误【英文标题】:Persistent invalid graphics state error when using ggplot2 【发布时间】:2013-12-07 23:11:11 【问题描述】:

我相信我的数据框没问题,我的代码也没问题。事实上,我已经删除了部分数据框和大部分图形代码,以使事情尽可能基本。但是,我仍然得到:

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))

【问题讨论】:

你试过(重新)安装ggp​​lot2吗? 我将此添加为答案,这样其他人可以更轻松地找到答案。您可以通过单击我的答案旁边的勾号来接受答案。只是为了确认一下,您最初安装了ggplot2 是的,已经安装好了。 重启 R 会话解决了我的问题。 仅供参考 - 如果您尝试构建太小的使用图形尺寸(例如,尝试以英寸为单位提供尺寸而不指定单位),也会出现此问题。 【参考方案1】:

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

【讨论】:

【参考方案2】:

尝试使用x11()win.graph() 解决这个问题。

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

我遇到了同样的错误并通过运行解决了它:

dev.off()

然后再次运行情节。我认为图形设备在早些时候通过导出一些图形而被搞砸了,但它没有被重置。这对我有用,而且比重新安装 ggplot2 更简单。

【讨论】:

这解决了问题,但你知道为什么会这样吗? @PedroCavalcanteOliveira 在我之前使用过par(mfrow = c(..., ...)) 之后,我遇到了问题。不知道其他图形参数,但它们可能会导致此问题。 它有帮助,但有什么用? 运行graphics.off()也为我工作。根据 R 文档,“graphics.off() 会关闭所有打开的图形设备。”【参考方案5】:

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

【讨论】:

dev.off' 是做什么的?【参考方案6】:

您可能不需要重新安装 ggplot2

解决方案:返回以前不起作用的情节。以下面的控制台输出为例。图形边距(显示图的窗口)太小而无法显示对(MinusInner)图。然后,当我尝试制作下一个 qplot 时,R 仍然挂断先前的错误。

对(MinusInner) plot.new() 中的错误:图形边距太大 qplot(Sample.Type, BAE,data=MinusInner, geom="boxplot") .Call.graphics(C_palette2, .Call(C_palette2, NULL)) 中的错误: 无效的图形状态

我通过展开绘图窗口并重新运行pairs(MinusInner) 绘图来修复第一个错误。然后责备,它奏效了。

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

【讨论】:

【参考方案7】:

解决方案是简单地重新安装ggplot2。您使用的 R 版本可能与您安装的 ggplot2 版本不兼容。或者,之前安装 ggplot2 时可能出现问题,导致您看到的问题。

【讨论】:

感谢您在此处保留此答案。虽然另一个答案更简单,dev.off() 对我不起作用,尝试重新安装 ggplot2 是一个不错的第二选择。 最好先试试dev.off(),比重新安装包花的时间少。如果dev.off() 不起作用,这可以是第二步。

以上是关于使用 ggplot2 时持续出现无效的图形状态错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 ggplot2 对象和自定义字体从终端运行 R 脚本(字体类型无效)

ggplot2一页多图排版的简便方法

您能否在应用程序提交状态“无效二进制”中出现错误“无效的 Swift 支持”和“缺少所需的图标文件”提供帮助?

在 ggplot2 中,使用两种图形类型时如何缩放图例?

当动态图形设备切换处于活动状态时,OS X 上的 SDL/OpenGL 出现无数警告

R语言ggplot2可视化:错误条(error bar)在图形上是水平的但是在图例中是垂直的使用ggstance包纠正过来(图例图标也是水平的)