如何检索isocontour坐标?

时间:2017-03-23 17:31:01

标签: r

我在网格上插入了数据,我需要检索等高坐标坐标:

require(akima)
require(pracma)
require(ggplot2)
require(RColorBrewer)

r <- seq(0.1, 1, length.out = 20)
theta <- seq(0, 90)

my.df <- expand.grid(r = r, theta = theta)
my.df$value <- 1/my.df$r^2 * sin(deg2rad(my.df$theta))

# Interpolating data on rectangular grid
data.interp <-
  interp(
    x = my.df$r * cos(deg2rad(my.df$theta)),
    y = my.df$r * sin(deg2rad(my.df$theta)),
    z = my.df$value,
    nx = 200,
    ny = 200,
    duplicate = "strip"
  )

data.xyz <- as.data.frame(interp2xyz(data.interp))
data.xyz <- setNames(data.xyz, c("x", "y", "value"))
data.xyz <- na.omit(data.xyz)

my.breaks <- c(0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100)

brks <- cut(data.xyz$value,
            breaks = my.breaks,
            ordered_result = TRUE)
levels(brks) <- gsub(",", " - ", levels(brks), fixed = TRUE)
levels(brks) <- gsub("\\(|\\]","",levels(brks))
data.xyz$brks <- brks

ggplot(data.xyz, aes(x = x, y = y, fill = brks)) +
  geom_tile() +
  scale_fill_manual("Value",
                    values = rev(colorRampPalette(brewer.pal(11, "Spectral"))(length(my.breaks))))

结果如下:

enter image description here

我需要的是检索我的等高线的坐标。

假设数据是轴对称的,创建这些轮廓的3D模型的目的。但在我这样做之前,我需要找到分隔颜色的线的坐标。

1 个答案:

答案 0 :(得分:0)

使用contourLines,以下是如何执行此操作:

r <- seq(0.1, 1, length.out = 20)
theta <- seq(0, 90)

my.df <- expand.grid(r = r, theta = theta)
my.df$value <- 1/my.df$r^2 * sin(deg2rad(my.df$theta))

my.matrix <- acast(my.df, r ~ theta, value.var = "value")


contour.lines <- contourLines(x = r,
                              y = theta,
                              z = my.matrix,
                              levels = seq(0, 100, by = 10))

contour.df <- data.frame()
for(level in contour.lines) {
  contour.df <- rbind(contour.df, data.frame(x = level$x * cos(deg2rad(level$y)),
                                             y = level$x * sin(deg2rad(level$y)),
                                             level = as.factor(level$level)))
}

ggplot(contour.df, aes(x, y, color = level)) + geom_path() + scale_x_continuous(limits = c(0, 1)) + scale_y_continuous(limits = c(0, 1))

enter image description here