虽然我知道在 R 中有一系列用于生成热图的函数,但问题是我无法生成具有视觉吸引力的地图。例如,下面的图片是我想要避免的热图的好例子。第一个显然缺乏细节,而另一个(基于相同的点)太详细而无用。这两个图都是由spatstat R 包中的 density() 函数生成的。
我怎样才能让更多的“流量”进入我的地块?我的目标是更多的商业SpatialKey ( screenshot ) 软件能够产生的结果。
有什么提示、算法、包或代码行可以带我朝这个方向发展吗?
虽然我知道在 R 中有一系列用于生成热图的函数,但问题是我无法生成具有视觉吸引力的地图。例如,下面的图片是我想要避免的热图的好例子。第一个显然缺乏细节,而另一个(基于相同的点)太详细而无用。这两个图都是由spatstat R 包中的 density() 函数生成的。
我怎样才能让更多的“流量”进入我的地块?我的目标是更多的商业SpatialKey ( screenshot ) 软件能够产生的结果。
有什么提示、算法、包或代码行可以带我朝这个方向发展吗?
有两件事会影响绘图的平滑度,用于内核密度估计的带宽和在绘图中分配颜色的中断。
根据我的经验,对于探索性分析,我只是调整带宽,直到得到有用的图。下面演示。
library(spatstat)
set.seed(3)
X <- rpoispp(10)
par(mfrow = c(2,2))
plot(density(X, 1))
plot(density(X, 0.1))
plot(density(X, 0.05))
plot(density(X, 0.01))
简单地更改默认配色方案将无济于事,更改像素的分辨率也无济于事(如果默认分辨率太精确,您应该降低分辨率并使像素更大)。尽管出于美学目的您可能想要更改默认配色方案,但它旨在具有高度区分性。
您可以做的帮助颜色的事情是将比例级别更改为对数(只有在您有一个非常不均匀的过程时才会真正有帮助),更改调色板以在较低端变化更多(在色带规范方面的偏差) R),或调整图例以具有离散箱而不是连续箱。
图例中的偏差示例改编自这里,我在 GIS 网站上还有一篇文章,在这里的一个非常简单的示例中解释了离散箱的着色。如果图案一开始就过度平滑或平滑不足,这些都无济于事。
Z <- density(X, 0.1)
logZ <- eval.im(log(Z))
bias_palette <- colorRampPalette(c("blue", "magenta", "red", "yellow", "white"), bias=2, space="Lab")
norm_palette <- colorRampPalette(c("white","red"))
par(mfrow = c(2,2))
plot(Z)
plot(logZ)
plot(Z, col=bias_palette(256))
plot(Z, col=norm_palette(5))
要使最后一个图像中的颜色透明(第一个颜色箱是白色的),可以只生成颜色渐变,然后用透明颜色替换 RGB 规范。下面的示例使用与上述相同的数据。
library(spatstat)
set.seed(3)
X <- rpoispp(10)
Z <- density(X, 0.1)
A <- rpoispp(100) #points other places than density
norm_palette <- colorRampPalette(c("white","red"))
pal_opaque <- norm_palette(5)
pal_trans <- norm_palette(5)
pal_trans[1] <- "#FFFFFF00" #was originally "#FFFFFF"
par(mfrow = c(1,3))
plot(A, Main = "Opaque Density")
plot(Z, add=T, col = pal_opaque)
plot(A, Main = "Transparent Density")
plot(Z, add=T, col = pal_trans)
pal_trans2 <- paste(pal_opaque,"50",sep = "")
plot(A, Main = "All slightly transparent")
plot(Z, add=T, col = pal_trans2)
您可能会受益于 akima 包中的 interp 函数。如果需要,这将使您可以将矩阵内插到另一个分辨率。要制作类似于链接示例的内容,您需要插入一个非常精细的网格(可能参数 xo 和 yo 的长度约为 1000)。这将为您提供一个可以使用 image() 绘制的新矩阵。如果你想要透明度,这将需要一些额外的工作。使用调色板做到这一点并不容易,因此您最终可能不得不将每个网格绘制为具有指定颜色的多边形。
您可能想查看 ggplot2。您尝试过的软件包似乎没有很好的配色方案或“流程”——看看 RColorBrewer。有一个博客用一个简单的例子实现了这些包。
我不确定您是否尝试绘制链接示例中显示的地理数据,但如果您知道 Google 提供“静态地图 API V2 开发人员指南”,您可以将 Google 和 R与名为 RgoogleMaps 的包结合使用.
祝你的研究好运。
您是否尝试过提高分辨率density
?尝试论点dimyx=c(512, 512)
或更高。