Я пытаюсь построить две переменные, где N = 700K. Проблема в том, что наложений слишком много, так что сюжет в основном становится сплошным черным блоком. Есть ли способ получить «облако» в градациях серого, где темнота графика зависит от количества точек в регионе? Другими словами, вместо того, чтобы показывать отдельные точки, я хочу, чтобы график был «облаком», и чем больше количество точек в области, тем темнее эта область.
r
scatter-plot
user702432
источник
источник
Ответы:
Один из способов справиться с этим - альфа-смешивание, которое делает каждую точку слегка прозрачной. Таким образом, области кажутся более темными, на которых нанесено больше точек.
Это легко сделать в
ggplot2
:Другой удобный способ справиться с этим (и, вероятно, более подходящий для количества имеющихся у вас точек) - это шестиугольное бинирование:
И есть также обычный старый прямоугольный биннинг (изображение опущено), который больше похож на вашу традиционную тепловую карту:
источник
scale_fill_gradient()
и укажите свои собственные низкие и высокие цвета или используйтеscale_fill_brewer()
и выберите одну из последовательных палитр.geom_point()
и нанести каждую отдельную точку.Вы также можете посмотреть на
ggsubplot
упаковку. Этот пакет реализует функции, которые были представлены Хэдли Уикхэмом еще в 2011 году ( http://blog.revolutionanalytics.com/2011/10/ggplot2-for-big-data.html ).(В дальнейшем я включаю слой «точек» для иллюстрации.)
Тем не менее, здесь есть проблемы, если у вас есть третья переменная, которую нужно контролировать.
Или другой подход
smoothScatter()
:источник
Обзор нескольких хороших вариантов в
ggplot2
:Вариант А: прозрачные точки
Вариант Б: добавить контуры плотности
Вариант C: добавить контуры плотности с заливкой
Вариант D: тепловая карта плотности
Вариант E: шестиугольники
Вариант F: коврики
Совместите в одной фигуре:
источник
Альфа-смешивание легко выполняется и с базовой графикой.
Первые шесть чисел после
#
- это цвет в шестнадцатеричном формате RGB, а последние два - непрозрачность, опять же в шестнадцатеричном формате, поэтому 33 ~ 3/16 непрозрачности.источник
Вы также можете использовать контурные линии плотности (
ggplot2
):Или объедините контуры плотности с альфа-смешением:
источник
Вам может пригодиться
hexbin
пакет. Со страницы справкиhexbinplot
:источник
geom_pointdenisty
изggpointdensity
пакета (недавно разработанного Лукасом Кремером и Саймоном Андерсом (2019)) позволяет визуализировать плотность и отдельные точки данных одновременно:источник
Мой любимый метод построения этого типа данных - это тот, который описан в этом вопросе - график плотности рассеяния . Идея состоит в том, чтобы сделать диаграмму рассеяния, но раскрасить точки по их плотности (грубо говоря, количеству перекрытия в этой области).
Это одновременно:
Вот результат верхнего ответа на связанный вопрос:
источник
R
.