Гладкость контурных линий в контурной зоне - PullRequest
1 голос
/ 26 марта 2012

Как я могу управлять сглаживанием контурных линий при построении контурного графика с использованием решетки пакета в R? По умолчанию это особенно неприятно для изображений с низким разрешением, где края контура четкие.

Edit: Вот моя проблема - сегменты соединяются в острые углы, а мне хотелось бы гладких суставов.

require(lattice)
contourplot(volcano[1:10,1:10])

Ответы [ 2 ]

1 голос
/ 13 октября 2017

Вот ответ, который сглаживает пример данных из обновленного вопроса, используя loess регрессия.

# original data - jagged contours
require(lattice)
contourplot(volcano[1:10, 1:10])

# convert to long form
require(reshape2)
a = melt(volcano)

# use loess to smooth
# higher values of span will deliver more smoothing
b = loess(value ~ Var1+Var2, data=a, span=0.02)

# estimate the smoothed values on our grid
smooth = predict(b, newdata=data.frame(Var1=a$Var1, Var2=a$Var2))
smooth = array(smooth, dim=dim(volcano))

# the result
contourplot(smooth[1:10, 1:10])


# worth also comparing the bigger picture
contourplot(volcano)
contourplot(smooth)
1 голос
/ 26 марта 2012

Без воспроизводимого примера немного сложно понять, что именно вы хотите.

В любом случае, попробуйте пакет KernSmooth.Сначала мы упаковываем и получаем некоторые данные:

library("KernSmooth")
data(geyser, package="MASS")

затем мы используем функцию bkde2D для вычисления оценки плотности ядра 2-d.Измените полосу пропускания, чтобы получить больше сглаживания:

x <- cbind(geyser$duration, geyser$waiting)
est <- bkde2D(x, bandwidth=c(0.7, 7))

Затем выполните контурный график на сглаженном выходе:

contour(est$x1, est$x2, est$fhat)
...