填充R中的轮廓图部分

时间:2018-11-20 10:59:33

标签: r ggplot2

我用以下代码在R中绘制了轮廓图:

library(mvtnorm)
# Define the parameters for the multivariate normal distribution
mu = c(0,0)
sigma = matrix(c(1,0.2,0.2,3),nrow = 2)

# Make a grid in the x-y plane centered in mu, +/- 3 standard deviations
xygrid = expand.grid(x = seq(from = mu[1]-3*sigma[1,1], to = mu[1]+3*sigma[1,1], length.out = 100),
                     y = seq(from = mu[2]-3*sigma[2,2], to = mu[2]+3*sigma[2,2], length.out = 100))

# Use the mvtnorm library to calculate the multivariate normal density for each point in the grid
distribution = as.matrix(dmvnorm(x = xygrid, mean = mu, sigma = sigma))

# Plot contours
df = as.data.frame(cbind(xygrid, distribution))
myPlot = ggplot() + geom_contour(data = df,geom="polygon",aes( x = x, y = y, z = distribution))
myPlot

This is what the contour plots look like.

我想通过对图的某些部分进行阴影/着色来说明累积概率,例如,区域{x<0, y<0}(或任何其他自定义区域)中的所有区域。

Here is a free hand drawing of what I seek to achieve.

R中使用ggplot有什么方法吗?

1 个答案:

答案 0 :(得分:0)

因此,您可以使用ggplot_build获得用于在图中绘制圆的坐标。随后,您可以尝试将这些坐标与geom_polygon结合使用以对特定区域进行着色。我最好的尝试:

library(dplyr)

data <- ggplot_build(myPlot)$data[[1]] 

xCoor <- 0
yCoor <- 0

df <- data %>% filter(group == '-1-001', x <= xCoor, y <= yCoor) %>% select(x,y)

# Insert the [0,0] coordinate in the right place
index <- which.max(abs(diff(rank(df$y))))
df <- rbind( df[1:index,], data.frame(x=xCoor, y=yCoor), df[(index+1):nrow(df),] )

myPlot + geom_polygon(data = df, aes(x=x, y=y), fill = 'red', alpha = 0.5)

Resulting plot

如您所见,它并不完美,因为数据中不包含[x,0][0,y]坐标,但这只是一个开始。