2016-07-04 15 views
3

私はプロットエンジンとしてggplot2を使用して、複数のファクタ列を一度にプロットしようとしています。複数メトリック列をプロットggplotを使用して複数の係数列をプロットするにはどうすればよいですか?

は単純です:

library(ggplot2) 
library(dplyr) # dplyr 0.5.0 select_if 
library(purrr) 
data(diamonds) 


diamonds %>% 
    select_if(is.numeric) %>% 
    gather %>% 
    ggplot(aes(x = value)) + 
    geom_histogram() + 
    facet_wrap(~key) 

plot multiple quantitative variables

しかし、私は1回のショットで複数の要因(定性)の列をプロットで成功しませんでした。プログラムで列を選択したいと思います。つまり、ではなく、という名前を直接付けています。

私はこれを試してみましたが、それはが賢明結果生成しません:私はこれらの線に沿って解決策があるかもしれないことを前提としてい

diamonds %>% 
    select_if(is.factor) %>% 
    gather %>% 
    ggplot(aes(x = value)) + geom_bar() + 
    facet_wrap(~key) + 
    coord_flip() 

enter image description here

を:

diamonds %>% 
    select_if(is.factor) %>% 
    ggplot(aes(x = .[[1]])) + geom_bar() 

.[[1]]をいくつかの列プレースホルダに置き換える必要があります(ここでは、私は直接列名を付けました。私が実際に多数の列を持っているので、回避する必要はありません)。

for-loopはおそらく仕事をしますが、私はdplyrを使ってそこに行きたいと思います。

+1

賢明な結果、つまり2番目の数字が希望の出力とどのように異なるのかを説明できますか?主な問題は、各プロットに独自のY軸がないことです(アルファベット順の並べ替えは意味がありません)。 – mkt

+1

#mkt、あなたのコメントのおかげで、#Axemanは良いアイデアを持っていた、それは私が探していたものだった –

答えて

3

あなたのfacetコールでscales = freeを使用するのがここのトリックです。たとえば、次のように

diamonds %>% 
    select_if(is.factor) %>% 
    gather %>% 
    ggplot(aes(x = value)) + geom_bar() + 
    facet_wrap(~key, scales = 'free') + 
    theme_bw() + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5)) 

enter image description here

残念ながら無料のスケールとcoord_flipは素晴らしいプレーしません。 をthe ggstance packageから使用するか、または、各列にlapplyを使用してggplotオブジェクトのリストを取得し、cowplotパッケージを使用して1つの図にまとめることができます。

+0

ありがとう!それは役に立ちました –

+0

'lapply'は' coord_flip'と一緒に遊ぶ方がいいかもしれません@ Axeman –

1
@Axemanより

たぶん少ないエレガントなだけでなく、作業、およびcoord_flipと協力:

library(gridExtra) 


gg_bar <- function(x, ...){ 
    { 
    ggplot(data_frame(x), aes(x = x)) + 
     geom_bar() + 
     coord_flip() 
    } 
} 

diamonds %>% 
    select_if(negate(is.numeric)) %>% 
    lapply(., function(x) gg_bar(x)) -> gg_bar_list 

do.call(grid.arrange, gg_bar_list) 

enter image description here

しかし、変数( "X")の名前が表示されていない、それはありません美しすぎる。

+0

['cowplot :: plot_grid'](https://cran.r-project参照) .org/web/packages/cowplot/vignettes/introduction.html)の代わりに 'grid.arrange'を使用して、自動整列とサブプロットアノテーションを行います。注釈は変数ラベルとして使用でき、y軸ラベルは表示しません。 – Axeman

関連する問題