Я пытаюсь получить что-то вроде функции smoothScatter
, только в ggplot. Я выяснил все, кроме графика N самых разреженных точек. Может ли кто-нибудь помочь мне с этим?
library(grDevices)
library(ggplot2)
# Make two new devices
dev.new()
dev1 <- dev.cur()
dev.new()
dev2 <- dev.cur()
# Make some data that needs to be plotted on log scales
mydata <- data.frame(x=exp(rnorm(10000)), y=exp(rnorm(10000)))
# Plot the smoothScatter version
dev.set(dev1)
with(mydata, smoothScatter(log10(y)~log10(x)))
# Plot the ggplot version
dev.set(dev2)
ggplot(mydata) + aes(x=x, y=y) + scale_x_log10() + scale_y_log10() +
stat_density2d(geom="tile", aes(fill=..density..^0.25), contour=FALSE) +
scale_fill_gradientn(colours = colorRampPalette(c("white", blues9))(256))
Обратите внимание, что в базовой графической версии 100 самых "разреженных" точек построены по графику сглаженной плотности. Разреженность определяется значением оценки плотности ядра в координате точки, и, что важно, оценка плотности ядра вычисляется после преобразования логарифма (или любого другого преобразования координат). Я могу построить все точки, добавив + geom_point(size=0.5)
, но мне нужны только редкие.
Есть ли способ выполнить это с помощью ggplot? На самом деле есть две части. Первый заключается в том, чтобы выяснить, что происходит после преобразований координат, а второе - отображать только те точки.