Как создать непрерывную карту плотности плотности 2D-данных рассеяния в R?
Я могу создать график плотности 1D данных с:
qplot(mydatapoints, geom='density')
Я также видел множество примеров сетки тепловых карт, но они более схожи с гистограммами для 1D-данных, в которых данные попадают в дискретные ведра вместо того, чтобы показывать плавную кривую.
Можно ли построить что-то похожее на 1D-плотность, но для 2D-данных, с (скажем) что-то вроде hue/saturation/lightness, чтобы представить плотность?
Ответы
Ответ 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")