R имеет много различных соответствующих инструментов. В частности, посмотрите в пространственном представлении . Подобный вопрос задавался в R-Help ранее, так что вы можете посмотреть на этот .
Посмотрите на функции contour
. Вот некоторые данные:
x <- seq(-3,3)
y <- seq(-3,3)
z <- outer(x,y, function(x,y,...) x^2 + y^2 )
Начальный сюжет несколько груб:
contour(x,y,z, lty=1)
Билл Данлэп предложил улучшение: «Часто лучше подгонять гладкую поверхность к данным, оценивать эту поверхность на более мелкой сетке и передавать результат на контур. Это гарантирует, что контурные линии не пересекаются и имеет тенденцию избегать ложных петель, которые вы можете получить от сглаживания самих контурных линий. Сплайны тонких пластин (Tps из библиотеки («поля»)) и лессы (среди прочих) могут соответствовать поверхности ».
library("fields")
contour(predict.surface(Tps(as.matrix(expand.grid(x=x,y=y)),as.vector(z))))
Это приводит к очень плавному графику, потому что сначала используется Tps()
для подбора данных, а затем вызывается contour
. В конечном итоге это выглядит так (вы также можете использовать fill.contour, если хотите, чтобы он был закрашен):
Для графика вы можете использовать либо lattice
(как в приведенном выше примере), либо пакет ggplot2
. В этом случае используйте функцию geom_contour()
. Пример можно найти здесь (ht Thierry) :
ds <- matrix(rnorm(100), nrow = 10)
library(reshape)
molten <- melt(data = ds)
library(ggplot2)
ggplot(molten, aes(x = X1, y = X2, z = value)) + geom_contour()