Я считаю, что R может занять много времени для создания графиков, когда присутствуют миллионы точек - неудивительно, учитывая, что точки строятся индивидуально. Кроме того, такие графики часто слишком загромождены и плотны, чтобы быть полезными. Многие из точек перекрываются и образуют черную массу, и много времени тратится на построение большего количества точек в этой массе.
Существуют ли статистические альтернативы представлению больших данных на стандартной диаграмме рассеяния? Я рассмотрел график плотности, но какие еще есть альтернативы?
r
data-visualization
Алекс Стоддард
источник
источник
Ответы:
Это трудная задача без готовых решений (это, конечно, потому что график плотности настолько заманчивый запасной вариант, чем никто на самом деле не заботится). Так что ты можешь сделать?
Если они действительно перекрываются (то есть имеют абсолютно одинаковые координаты X и Y), и вы не используете альфа, то лучшей идеей будет просто уменьшить использование перекрытия
unique
(с альфой оно может суммироваться по таким группам).Если нет, вы можете вручную округлить координаты до ближайших пикселей и использовать предыдущий метод (но это грязное решение).
Наконец, вы можете сделать график плотности только для того, чтобы использовать его для отбора точек в наиболее плотных областях. Это, с другой стороны, не создаст точно такой же сюжет и может привести к появлению артефактов, если не будет точно настроено.
источник
unique
или округлением может привести к смещенным (обманчивым) графикам. Важно как-то указать степень перекрытия с помощью некоторых графических средств, таких как легкость или графики подсолнечника.Посмотрите на пакет hexbin , в котором реализована бумага / метод Дэна Карра. PDF виньетка имеет больше деталей , которые я привожу ниже:
источник
smoothScatter {RColorBrewer}
иdensCols {grDevices}
. Я могу подтвердить, что это работает довольно хорошо с тысячами до миллионов точек из генетических данных.Я должен признать, что я не полностью понимаю ваш последний абзац:
Также неясно, какой тип сюжета (функции) вы ищете.
Учитывая, что у вас есть метрические переменные, вы можете найти графики с шестигранной или подсолнечника полезными. Для дальнейших ссылок см.
источник
Другой прямой ответ на этот вопрос - пакет rgl, который может построить миллионы точек, используя OpenGL. Кроме того, укажите размер точки (например, 3) и уменьшите масштаб, чтобы увидеть эти центры масс как монолитные блоки, или увеличьте масштаб и посмотрите структуру того, что раньше было монолитным - размеры точек постоянны, но расстояния между ними на экране зависит от масштабирования. Альфа-уровни также могут быть использованы.
источник
Вот файл, который я называю
bigplotfix.R
. Если вы его создадите, он определит оболочку, дляplot.xy
которой «сжимает» данные графика, когда они очень велики. Оболочка ничего не делает, если ввод маленький, но если он большой, он разбивает его на куски и просто отображает максимальное и минимальное значения x и y для каждого чанка. Sourcingbigplotfix.R
также повторяет привязку,graphics::plot.xy
чтобы указать на оболочку (можно использовать несколько раз подряд).Обратите внимание , что
plot.xy
функция «рабочей лошадки» для стандартных методов ПРОКЛАДКИ , какplot()
,lines()
иpoints()
. Таким образом, вы можете продолжать использовать эти функции в своем коде без изменений, и ваши большие графики будут автоматически сжаты.Это пример выходных данных. По сути
plot(runif(1e5))
, с точками и линиями, с и без "сжатия", реализованного здесь. График «сжатые точки» не попадает в среднюю область из-за характера сжатия, но график «сжатые линии» выглядит намного ближе к несжатому оригиналу. Время дляpng()
устройства; По некоторым причинам точки в устройстве гораздо быстрееpng
, чем вX11
устройстве, но ускорения в немX11
сопоставимы (X11(type="cairo")
было медленнее, чемX11(type="Xlib")
в моих экспериментах).Я написал это потому, что устал от
plot()
случайного запуска большого набора данных (например, файла WAV). В таких случаях мне пришлось бы выбирать между ожиданием нескольких минут до завершения графика и завершением сеанса R с сигналом (таким образом, теряя мою недавнюю историю команд и переменные). Теперь, если я не забуду загружать этот файл перед каждой сессией, я действительно смогу получить полезный график в этих случаях. Небольшое предупреждающее сообщение указывает, когда данные графика были «сжаты».источник
Возможно, меня откажут от моего метода, плохие воспоминания о том, как один из моих научных сотрудников кричал на людей за то, что они выбрасывают хорошие данные, переводя их в категории (конечно, сейчас я согласен, смеется), не знаю. Во всяком случае, если вы говорите о графике рассеяния, то у меня были те же проблемы. Теперь, когда у меня есть числовые данные, нет особого смысла классифицировать их для анализа. Но визуализация - это другая история. Что я обнаружил, что лучше всего работает для меня, это сначала (1) разбить вашу независимую переменную на группы, используя функцию cut. Вы можете поиграть с количеством групп, а затем (2) просто построить график DV против урезанной версии IV. R будет генерировать коробочные графики вместо этого отвратительного рассеивающего графика. Я рекомендую удалить выбросы из графика (используйте параметр outline = FALSE в команде plot). Опять же, я НИКОГДА не буду тратить совершенно хорошие числовые данные, классифицируя и затем анализируя. Слишком много проблем делает это. Хотя я знаю, что это тема для обсуждения. Но делаю это специально для того, чтобы хотя бы получить какой-то визуальный смысл из данных, не так много вреда, который я видел из этого. Я построил данные размером до 10M и все же сумел извлечь из этого смысл. Надеюсь, это поможет! С уважением! видел из этого. Я построил данные размером до 10M и все же сумел извлечь из этого смысл. Надеюсь, это поможет! С уважением! видел из этого. Я построил данные размером до 10M и все же сумел извлечь из этого смысл. Надеюсь, это поможет! С уважением!
источник
Для больших временных рядов я полюбил smoothScatter (часть базы R не меньше). Мне часто приходится включать некоторые дополнительные данные, и сохранение базового API графика действительно полезно, например:
Что дает вам (если вы простите дизайн):
Он всегда доступен и хорошо работает с огромными наборами данных, поэтому приятно хотя бы взглянуть на то, что у вас есть.
источник