2016-08-26 31 views
6

ggplot2で使用される各変数に独立したストリップテーマを設定できますかfacet_wrap複数の変数を使用するggplot2 facet_wrapの独立したストリップテーマ

は、一例として、このコードの塊を取る:

p1 <- ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(c("cyl", "drv"), labeller = "label_both") 
plot(p1) 

Plot output

を私は別のテーマで上位ストリップ( 'CYL')を持っているしたいと思う - 太字で、言います。さらに、私は、 'drv'をイタリックで、異なるフォントタイプとサイズにしたいと思うかもしれません。どうすればいい?

p1 <- p1 + theme(strip.text.variable1 = element_text(face = 'bold'), 
        strip.text.variable2 = element_text(face = 'italic', size = 8) 
       ) 

残念ながら、私はドキュメントまたは前の質問では、このようなものを見つけることができませんでした:

私はのラインで何かを考えていました。

乾杯

編集:私は地域社会へのさらなる助けになるために、一般的な、もう少し質問をしました。

+2

[ggplotファセットラップラベルに異なるフォントサイズを使用するには?](http://stackoverflow.com/questions/36334486/how-to-use-different-font-sizes- in-ggplot-facet-wrap-labels)が適切と思われます。 – Henrik

答えて

3

太字のラベルを返すために、label_bothに基づいて新しい関数を作成する必要があるはずですが、これまでのところ私の試みは恐ろしいError in variable[[i]] : subscript out of boundsで終了しました。

これに代わる方法は、必要なラベルを作成する関数を作成することです。これはthis answerによく似ています。この関数では、接頭辞を変数の値に追加して太字にします。

make_labels = function(string, prefix = "cyl: ") { 
    x = paste0(prefix, as.character(string)) 
    do.call(expression, lapply(x, function(y) bquote(bold(.(y))))) 
} 

facet_wrapに "CYL" 変数に対してas_labeller以内に、この関数を使用します。 as_labellerからlabel_parsedまでのデフォルトラベラーを変更して、式が正しく解析されるようにしたいとします。他の変数にはlabel_bothを使用してください。

ggplot(mpg, aes(displ, hwy)) + 
    geom_point() + 
    facet_wrap(c("cyl", "drv"), 
       labeller = labeller(cyl = as_labeller(make_labels, default = label_parsed), 
            drv = label_both)) 

enter image description here

+0

これは確かに一つの方法です、ありがとう。しかし、私は 'prefix =" cyl: "'呼び出しをアンカーするために "cyl"の 'label_both'パラメータを使用することに固執しています。また、この関数に制約のない関数を使うことも興味深いでしょう(例えば、代わりに 'label_value'で)。 –

+0

labellerをあなたの特定の変数にハードコードしない方がいいでしょう( '" cyl: "'を使う必要はありませんが、代わりにあなたの変数名を使用してください)。私が書いた関数は、特に 'label_parsed'で' bold'を使うために使われることになっています。 – aosmith

+0

はい、私は '' cyl: ''を意味していました(私の場合、 ''メソッド: '')。申し訳ありませんが、私は2番目の文についてはっきりしていませんでした。私が言いたいことは、この解決策は関数の変数の名前を明示的に関数に入れた場合にのみ働くことです(そして、それはストリップ自体に含まれています)。 "cylを必要としない場合にはうまくいくでしょう「4」、「5」、「6」、「8:」の4つの文字列があります。 –

関連する問題