Постоянная ошибка недопустимого состояния графики при использовании ggplot2


119

Я считаю, что мой фреймворк в порядке, и мой код в порядке. Фактически, я удалил части фрейма данных и большую часть графического кода, чтобы сделать вещи максимально простыми. Но все же я получаю:

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

3
Вы пробовали (пере) установить ggplot2?
Paul Hiemstra

Я добавил это как ответ, чтобы другим людям было легче найти ответ. Вы можете принять ответ, нажав на галочку рядом с моим ответом. Просто чтобы подтвердить, вы ggplot2установили изначально?
Paul Hiemstra

Да, он уже был установлен.
Назер

3
перезапуск сеанса R решил мою проблему.
Крис

К вашему сведению - эта проблема также может возникнуть, если вы попытаетесь построить слишком маленькие размеры фигур (например, при попытке указать размеры в дюймах без указания единицы измерения).
Кейт Хьюитт

Ответы:


353

Я столкнулся с этой же ошибкой и решил ее, запустив:

dev.off()

а затем снова запустить сюжет. Я думаю, что ранее с графическим устройством что-то пошло не так из-за экспорта графики, и оно не было сброшено. Это сработало для меня, и это проще, чем переустановка ggplot2.


1
Это решает проблему, но знаете ли вы, почему это происходит?
Педро Кавальканте,

2
@PedroCavalcanteOliveira У меня была проблема после того, как я использовал par(mfrow = c(..., ...))раньше. Не знаю о других графических параметрах, но они могут вызвать эту проблему.
loki

1
Это помогло, но что это значит?
vasili111

9

Решение - просто переустановить ggplot2. Возможно, существует несовместимость между используемой вами версией R и установленной вами версией ggplot2. Кроме того, что-то могло пойти не так при установке ggplot2ранее, что вызвало проблему, которую вы видите.


4
Спасибо, что сохранили этот ответ здесь. Хотя другой ответ проще, dev.off()у меня он не сработал, и это хороший второй вариант, чтобы попробовать переустановить ggplot2.
Назер

Возможно, лучше dev.off()сначала попробовать , это займет меньше времени, чем переустановка пакета. Это может быть вторым шагом, если dev.off()не сработало.
Джейсон Гол

6

Я обнаружил, что это происходит, когда вы смешиваете диаграммы ggplot с диаграммами графиков в одном сеансе. Использование решения «dev.off», предложенного Полом, решает проблему.


Что dev.off'делает?
vasili111

4

Скорее всего, вам не нужно переустанавливать ggplot2

Решение: вернуться к сюжету, который ранее не работал. Возьмем для примера вывод консоли ниже. Поля рисунков (окно, в котором отображаются ваши графики) были слишком малы для отображения парных (MinusInner) графиков. Затем, когда я попытался сделать следующий qplot, R все еще зависал из-за предыдущей ошибки.

Pair (MinusInner) Ошибка в plot.new (): слишком большие поля рисунка qplot (Sample.Type, BAE, data = MinusInner, geom = "boxplot") Ошибка в .Call.graphics (C_palette2, .Call (C_palette2, NULL) ): недопустимое состояние графики

Я исправил первую ошибку, расширив окно графика и повторно запустив график пар (MinusInner). Тогда бэм, это сработало.

пары (MinusInner) qplot (Sample.Type, BAE, data = MinusInner, geom = "boxplot")


0

Я решил эту проблему, очистив все графики в консоли, а затем убедившись, что область графика достаточно велика, чтобы вместить то, что я создавал.


0

попробуйте получить графику с помощью x11()или win.graph()и решить эту проблему.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.