Подтвердить что ты не робот

Как создать непрерывную карту плотности плотности 2D-данных рассеяния в R?

Я могу создать график плотности 1D данных с:

qplot(mydatapoints, geom='density')

Я также видел множество примеров сетки тепловых карт, но они более схожи с гистограммами для 1D-данных, в которых данные попадают в дискретные ведра вместо того, чтобы показывать плавную кривую.

Можно ли построить что-то похожее на 1D-плотность, но для 2D-данных, с (скажем) что-то вроде hue/saturation/lightness, чтобы представить плотность?

4b9b3361

Ответ 1

Я думаю, вам нужна оценка 2D-плотности, которая реализуется kde2d в пакете MASS.

df <- data.frame(x=rnorm(10000),y=rnorm(10000))

через MASS и базу R:

k <- with(df,MASS:::kde2d(x,y))
filled.contour(k)

через ggplot (geom_density2d() вызывает kde2d())

library(ggplot2)
ggplot(df,aes(x=x,y=y))+geom_density2d()

Я нахожу filled.contour более привлекательным, но с большой болью работать, если вы хотите что-либо изменить, потому что он использует layout и использует макет страницы. На основе ответа Брайана Дигга, который заполняет цвета между контурами: здесь эквивалент с различными уровнями альфа, с прозрачными точками, добавленными для сравнения.

ggplot(df,aes(x=x,y=y))+
  stat_density2d(aes(alpha=..level..), geom="polygon") +
  scale_alpha_continuous(limits=c(0,0.2),breaks=seq(0,0.2,by=0.025))+
  geom_point(colour="red",alpha=0.02)+
  theme_bw()

enter image description here

Ответ 2

Объединяя два других ответа (один указывает на geom_density2d и один дает образцы данных и scale_colour_gradient):

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df,aes(x=x,y=y))+
    stat_density2d(aes(fill=..level..), geom="polygon") +
    scale_fill_gradient(low="blue", high="green")

Ответ 3

Там также scale_colour_gradient()

df <- data.frame(x=rnorm(10000),y=rnorm(10000))
ggplot(df, aes(x,y,colour=y)) + geom_point() + scale_colour_gradient(low="blue",high="red")