Постійна помилка невірного стану графіки при використанні 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?
Пол Хіемстра

Я додав це як відповідь, таким чином інші люди можуть легше знайти відповідь. Ви можете прийняти відповідь, натиснувши галочку біля моєї відповіді. Просто для підтвердження, ви ggplot2встановили спочатку?
Пол Хіемстра

Так, це вже було встановлено.
Nazer

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

FYI - ця проблема також може виникнути, якщо ви намагаєтеся побудувати використані розміри фігур, які є занадто малими (наприклад, намагаючись надати розміри в дюймах, не вказуючи одиницю).
Кіт Х'югітт

Відповіді:


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 все ще був відключений від попередньої помилки.

пари (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, дані = MinusInner, geom = "boxplot")


0

Я вирішив це, очистивши всі ділянки в консолі, а потім переконавшись, що площа ділянки була достатньо великою, щоб вмістити те, що я створював.


0

спробувати вийти з Графіком x11()або win.graph()і вирішити цю проблему.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.