2017-10-10 10 views
2

より良い方法でfacet_wrapプロットを再配置したいと思います。サブプロット内のポイントに基づいてfacet_wrapプロットを再配置

library(ggplot2) 

set.seed(123) 
freq <- sample(1:10, 20, replace = T) 
labels <- sample(LETTERS, 20) 
value <- paste("i",1:13,sep='') 

lab <- rep(unlist(lapply(1:length(freq), function(x) rep(labels[x],freq[x]))),2) 
ival <- rep(unlist(lapply(1:length(freq), function(x) value[1:freq[x]])),2) 

df <- data.frame(lab, ival, type=c(rep('Type1',119),rep('Type2',119)),val=runif(238,0,1)) 


ggplot(df, aes(x=ival, y=val, col = type, group = type)) + 
    geom_line() + 
    geom_point(aes(x=ival, y=val)) + 
    facet_wrap(~lab, ncol=3) + 
    theme(axis.text.x=element_text(angle=45, vjust=0.3)) + 
    scale_x_discrete(limits=paste('i',1:13,sep='')) 

それは下記のプロットで結果:

enter image description here

その頻度に基づいてプロットを並べ替える方法はありますか? labの周波数(またはタイプごとのポイント数)の中には、非常に低いものがあります(1-3)。私はfacet_wrapのプロットをレーベルオーダーではなく周波数に調整したいと思っています。 1つの利点は、プロット領域を縮小し、プロットからの直感性を高めることです。

オンザフライで計算された頻度値を使用して、facet_wrapに渡すことはできますか?または、それはdplyrアプローチを使用して個別に行われ、データを低/中/高頻度のプロットに分割する必要がありますか?

答えて

2

ここに1つのアイデアがあります。 dplyrを使用して各グループの番号をlabに、fct_reorderforcatsに変更して要因レベルを並べ替えることができます。

library(dplyr) 
library(forcats) 

df2 <- df %>% 
    group_by(lab) %>% 
    mutate(N = n()) %>% 
    ungroup() %>% 
    mutate(lab = fct_reorder(lab, N)) 

ggplot(df2, aes(x=ival, y=val, col = type, group = type)) + 
    geom_line() + 
    geom_point(aes(x=ival, y=val)) + 
    facet_wrap(~lab, ncol=3) + 
    theme(axis.text.x=element_text(angle=45, vjust=0.3)) + 
    scale_x_discrete(limits=paste('i',1:13,sep='')) 

enter image description here

fct_reorderを使用しているときに因子レベルを逆にしたい場合は.desc = TRUEを設定します。

+0

これは、 'lab'変数のレベルを並べ替えるものです。また、baseRの手法を使用して行うこともできます。適切かつ最小限の方法でプロット領域を減らす方法はありますか?利用可能なポイントがない場合は、 'x軸'の制限をオーバーライドします。 – Prradep

+3

また、 'facet_wrap(〜reorder(lab、N))'のように 'N 'を作成し、' facet_wrap'呼び出しで古い 'reorder'を使うだけです。その後、 'facet_wrap(〜reorder(lab、-N))'がそれを逆にします。 –

+0

私はこの並べ替えを意味し、レベルが最も高く評価されています。しかし、私は、必要な領域だけを使って作図領域を減らす方法があるかどうかを尋ねています。または、プロットを頻度に基づいてプロットのサブセットに分割する。基本的に、プロットをより簡単に理解するのに役立つアプローチを探しています。具体的な方法はありません。 – Prradep

関連する問題