(对不起,如果我的英语不完美......:-s)
我的问题几乎与本主题相同: Creating a filled contour plot using data in lists
但是,不同之处在于我想在1个方向上绘制与我的(x,y)坐标对应的密度! 我解释 : 我有一个像这样的data.frame:
X <- matrix(c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3), nrow=4)
Y <- matrix(c(-1.0190, -0.9617, -0.9044, -0.8470, -1.0617, -0.9641, -0.8664, -0.7688, 0.4623, 0.6012, 0.7401, 0.8790), nrow=4)
Z <- matrix(c(3.9216, 3.9216, 3.9216, 11.7647, 1.9608, 1.9608, 1.9608, 11.7647, 1.9608, 1.9608, 9.8039, 9.8039), nrow=4)
Niveau <- data.frame(X=c(X),Y=c(Y),Z=c(Z))
X表示x坐标,Y表示y坐标,Z表示仅在Y方向上的百分比密度。对于每个x坐标,我计算了Y方向的密度。结果是在Z向量中。 您可以看到它不是(x,y)中的常规网格。 我想绘制密度为Z的“等高线图”,但到目前为止,我没有成功...... 我试过这个命令:
ggplot(Niveau, aes(x=X, y=Y, z=Z)) + geom_density2d()
但它绘制了x和y方向的密度,我只想在Y方向。 当我尝试命令时:
filled.contour(t(Z), nlevels=10)
它不尊重(x,y)坐标。并且无法实施:
filled.contour(X,Y,Z, nlevels=10)
之后,一些研究,我发现这个问题,我的问题是一样的: How to draw a contour plot when data are not on a regular grid?
但答案并不对应:解决方案是(x,y)中的“常规网格”,而这不是我所拥有的! 有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
谢谢!有用 !!从我寻找的时间开始......
这就是我的所作所为:
library(akima)
my.heat.colors <- function(x) { rev(heat.colors(x, alpha=1)) }
my.matrix <- interp(X,Y,Z)
ind.mat.na <- which(is.na(c(my.matrix$z)))
my.matrix$z[ind.mat.na] <- 0
filled.contour(my.matrix, nlevels=10, color=my.heat.colors)
现在我将在此绘制轮廓。
再次感谢你!