2016-10-24 4 views
1

ggplot2は、サイズ変更/変形のようです。ggplot2はサイズの変更/変形です - 元のデータを元に戻す方法は?

は、以下の

require(ggplot2); require(dplyr) 
set.seed(1234) 
d <- data.frame(x = rnorm(100), y = rnorm(100), size = runif(100)) 
p.out <- ggplot(d, aes(x, y, size = size)) + geom_point() 
p.data <- p.out %>% layer_data %>% arrange(x) 
d2 <- d %>% arrange(x) 
head(d2) 
      x   y  size 
## 1 -2.345698 -0.50247778 0.7757949 
## 2 -2.180040 -0.31611833 0.3802893 
## 3 -1.806031 -0.37723765 0.2547007 
## 4 -1.629093 -1.65010093 0.2722072 
## 5 -1.448205 0.08005964 0.1999333 
## 6 -1.390701 -1.12376279 0.5117742 

p.data %>% select(size, x, y) %>% head 

##  size   x   y 
## 1 5.407443 -2.345698 -0.50247778 
## 2 4.084550 -2.180040 -0.31611833 
## 3 3.523348 -1.806031 -0.37723765 
## 4 3.608829 -1.629093 -1.65010093 
## 5 3.234916 -1.448205 0.08005964 
## 6 4.579018 -1.390701 -1.12376279 

xとyは

lm(y ~ x, p.data) 


## Call: 
## lm(formula = y ~ x, data = p.data) 
## 
## Coefficients: 
## (Intercept)   x 
##  0.03715  -0.02608 

lm(y ~ x, d) 

## Call: 
## lm(formula = y ~ x, data = d) 
## 
## Coefficients: 
## (Intercept)   x 
##  0.03715  -0.02608 

元のデータと一致するように見えるが、サイズの変数が突然変異/何とか

cor(p.data$size, d2$size) 
## [1] 0.9783827 

lm(y ~ x, data = d, weights = size) 

## Call: 
## lm(formula = y ~ x, data = d, weights = size) 
## 
## Coefficients: 
## (Intercept)   x 
## -0.02586  -0.11537 

lm(y ~ x, p.data, weights = size) 

## Call: 
## lm(formula = y ~ x, data = p.data, weights = size) 
## 
## Coefficients: 
## (Intercept)   x 
##  0.009372 -0.065445 

ggplot2がいるようだ変換に思える考えてみましょう元のデータを使用すると正しいプロットが生成されますが、再現できないようですプロットはlayer_data()またはggplot_build()です。 p.dataの変数sizeを元のサイズ変数に戻すにはどうすればよいですか?

+1

ニースが見つかりました。 'p.out $ data'はどうですか? –

+0

ああよかった!私は 'p.out $ data'について知らなかった。' p.out $ data'は、実際のデータを 'cor(p.out.data $ size、d2 $ size)'が1になるように与える私はxですべてを整理しますが、 'cor(p.out.data $ size、p.data $ size)'は0.978に等しいです。私はここで何が起こっているのか分かりません。上記のいくつかの方法を試したところ、私のコードにエラーがあるとは思わない。結局、p.out $データは私に何が欲しいのですか?私が受け入れるでしょう... – chandler

答えて

1

ggplot2にもっと精通した人が興味を起こさせているかもしれません。その間、p.out$dataを使って直接ggplotオブジェクトからデータを呼び出してみてください。

+0

もう一度クイックコメント:layer_dataとggplot_buildの利点は、名前を "x"、 "y"、 "size"などに変更したことです。 'p.out $ data'はユーザが指定したデフォルトの名前を使い、次にどの変数がx軸やy軸に対応するかを調べるために 'p.out $ mapping'を使わなければなりません。 – chandler

関連する問題