在上一个问题中,我用ggplot2代替了(使用字段包)生成的等高线图(下面的完整示例).唯一的麻烦是,我想复制轮廓标签的位置,contour()默认情况下是在线的"最平坦"部分 - 第二张图片可能会显示原因.我对如何设置计算感到困惑.我在这里看到可以抓取用于生成轮廓线的数据,然后geom_text()可以用来绘制文本.那么剩下的就是弄清楚如何计算"最平坦"的部分.想法?
library(fields)
library(ggplot2)
library(reshape)
library(directlabels)
sumframe<-structure(list(Morph = c("LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "LW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW", "SW"), xvalue = c(4, 8, 9, 9.75, 13, 14, 16.25, 17.25, 18, 23, 27, 28, 28.75, 4, 8, 9, 9.75, 13, 14, 16.25, 17.25, 18, 23, 27, 28, 28.75), yvalue = c(17, 34, 12, 21.75, 29, 7, 36.25, …Run Code Online (Sandbox Code Playgroud) R中(x,y,z)的2D图的选项有点多.然而,解决这些选择是一个挑战,特别是在所有三个都是连续的情况下.
为了澄清问题(并可能有助于解释为什么我可能会被绊倒contour或image),这里有一个可能的分类方案:
如果我遗漏了一些情况,请告诉我.我感兴趣的案例是#5.关于关系的一些注释:
heatmap,image和函数ggplot.plot,但使用颜色渐变留给用户.cut,但这是不优雅和四四方方的.十六进制分箱可能更好,但这似乎不容易取决于z的值是否存在陡峭的梯度.我决定使用十六进制分箱,但非常欢迎其他聚合函数,特别是如果它们可以使用z值.我怎么能做#5?这是产生鞍座的代码,虽然spread改变z值的扩展值,这应该在绘制渐变时产生差异.
N = 1000
spread = 0.6 # Vals: 0.6, 3.0
set.seed(0)
rot = matrix(rnorm(4), ncol = 2)
mat0 = matrix(rnorm(2 * N), ncol = 2)
mat1 = mat0 %*% rot
zMean = mat0[,2]^2 - mat0[,1]^2
z = rnorm(N, mean = zMean, sd = spread * median(abs(zMean)))
Run Code Online (Sandbox Code Playgroud)
我想做一些类似的事情hexbin …