Плохой график качества при использовании кривой () в окнах [дубликат]

Ну, простыми словами:

Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.

Итак, как это решить:

  1. Отладить и отпустить отладчик ... Он сразу приведет вас к переменной, которая сломана ... Теперь ваша задача - просто исправить это. Используя новое ключевое слово в соответствующем месте.
  2. Если это вызвано некоторыми командами базы данных, потому что объект отсутствует, все, что вам нужно сделать, это выполнить нулевую проверку и обработать его:
    if (i == null) {
        // Handle this
    }
    
  3. Самый сложный. если GC уже собрал объект ... Это обычно происходит, если вы пытаетесь найти объект, используя строки ... То есть, найдя его по имени объекта, может случиться, что GC, возможно, уже очистил его ... Это трудно найти и станет проблемой. Лучшим способом решения этой проблемы является выполнение нулевых проверок везде, где это необходимо в процессе разработки. Это сэкономит вам много времени.

Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);

29
задан Thomas Browne 16 May 2011 в 21:51
поделиться

4 ответа

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

  • установите пакет cairoDevice и используйте Cairo_png(). Согласно документации:
 This functions the same as any other R graphics device. You may
 use the conventional plot commands and expect essentially the same
 output, except that everything is anti-aliased (similar to other
 vector-based devices like Quartz). Alpha-blending is supported, as
 is enhanced interactivity via ‘getGraphicsEvent’. The device
 should work the same across all supported platforms (Mac, Windows,
 and Linux).
  • Измените PNG с гораздо более высоким разрешением (или выведите данные из R в формате PDF) и используйте ImageMagick ( convert) или какой-либо другой инструмент для получения сглаженной версии.
18
ответ дан Ben Bolker 25 August 2018 в 08:41
поделиться

Используйте векторное устройство, такое как pdf. Сначала убедитесь, что у вас есть эта возможность, и поэтому неудивительно, что функция capabilities - это то, что нужно проверить. Если у вас есть pdf, просто выполните это:

pdf(file="out_graph.pdf")
s3d <-scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
  type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp) 
s3d$plane3d(fit)
dev.off()

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

9
ответ дан 42- 25 August 2018 в 08:41
поделиться

Установка cairoDevice больше не нужна для использования Каира с устройствами png. Теперь вы можете указать type='cairo' при открытии устройства. Сравните следующее:

png('test1.png', 500, 500)
s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
                     type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp) 
s3d$plane3d(fit)
dev.off()

png('test2.png', 500, 500, type='cairo')
s3d <- scatterplot3d(wt,disp,mpg, pch=16, highlight.3d=TRUE,
                     type="h", main="3D Scatterplot")
fit <- lm(mpg ~ wt+disp) 
s3d$plane3d(fit)
dev.off()

Я запускаю Win 8.1 и 64-бит R 3.2.2.

8
ответ дан jbaums 25 August 2018 в 08:41
поделиться

Вам не нужно проходить через файлы, вы можете просто установить cairoDevice, как было предложено Ben Bolker, а затем вызвать функцию Cairo (), которая даст вам полностью сглаженное окно сюжета под Windows (хотя и медленнее).

1
ответ дан Thomas Browne 25 August 2018 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: