2013-03-27 59 views
1

ggplot让我绘制的数据系列X轮廓线和y:r保存轮廓线成数据帧

library(ggplot2) 
df <- data.frame(x=c(1:100),y=rnorm(100)) 
ggplot(df,aes(x=x,y=y))+geom_density2d() 

我希望能够挽救四个主要轮廓线的数据输出( 95,75,50,25)max和(95,75,50,25)min。 我会很感激你的帮助。 也许有一种方法直接做到这一点,而不使用ggplot。

+0

该ggplot()调用的输出中没有轮廓线。它重新提供数据和方向来进行计算和绘图,但不是结果。 – 2013-03-27 18:24:21

+0

标题并不真正反映问题... – WAF 2016-10-31 14:44:08

回答

3

使用功能ggplot_build()围绕ggplot()对象,您可以访问所有用于绘图的数据。数据存储在列表元素data中。

p<-ggplot_build(ggplot(df,aes(x=x,y=y))+geom_density2d()) 

str(p$data) 
List of 1 
$ :'data.frame': 1895 obs. of 6 variables: 
    ..$ level: num [1:1895] 5e-04 5e-04 5e-04 5e-04 5e-04 5e-04 5e-04 5e-04 5e-04 5e-04 ... 
    ..$ x : num [1:1895] 1 2 3 4 5 ... 
    ..$ y : num [1:1895] 1.42 1.44 1.45 1.45 1.46 ... 
    ..$ piece: int [1:1895] 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ group: Factor w/ 13 levels "1-001","1-002",..: 1 1 1 1 1 1 1 1 1 1 ... 
    ..$ PANEL: int [1:1895] 1 1 1 1 1 1 1 1 1 1 ... 

您可以将这些数据存储为单独的数据框。

gg<-p$data[[1]] 
head(gg) 
    level  x  y piece group PANEL 
1 5e-04 1.000000 1.423926  1 1-001  1 
2 5e-04 2.000000 1.435286  1 1-001  1 
3 5e-04 3.000000 1.445293  1 1-001  1 
4 5e-04 4.000000 1.454166  1 1-001  1 
5 5e-04 5.000000 1.462106  1 1-001  1 
6 5e-04 5.255343 1.463967  1 1-001  1 

grouppiece变量示出了用于哪一行的每个值属于(1 - 外部线,13 - 内侧线在这种情况下)。