2017-03-23 10 views
0

私はグリッド上で補間されたデータを持っていると私は等高線座標取得する必要があります。ここではisocontour座標を取得するには?

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モデルを作成する目的。しかし私がそれをする前に、色を分ける線の座標を見つける必要があります。 contourLinesを使用して

答えて

0

は、ここにこれを行う方法です:

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

関連する問題