我想要实现类似于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实现这一点?这里实际上有两个部分:首先确定经过坐标转换之后的异常值,其次仅绘制这些点。