2016-05-23 7 views
4

に沿って1面の軸、未解析のラベルに沿ってラベルを解析されました他の面取り寸法。私の場合は、複数行のストリップラベルのさまざまな解決策(hereなど)はちょっと厄介です。私はsnake_caseで因子のラベルを持っているし、プログラム(これらの線に沿って解決策も受け入れられるだろうが)substitute(bquote(parse(...))地獄に下降せずに、複数行のバージョンにそれらすべてを変換できるようにしたいです。は私がのための1つのファセット寸法とplotmathスタイルの数学式の私は複数行、プレーンテキストのラベルを持っているシナリオに便利な解決策を見つけるためにしようとしている他の

私が行った方向は、label_parsed()を適用するカスタムラベラーを書こうとしました(またはしようとしました)か、改行が含まれているかどうかに応じてラベルを残しておきます。私は解析されたものの正しい構文を得ることができない。マルチラインの現在の構造は、解析対象外のものは動作し

List of 1 
$ : chr [1:4] "peak\ntime" "peak\nvirulence" "equilibrium\nvirulence" "relative\npeak" 

であるが、解析されたものはない

List of 3 
$ :List of 1 
    ..$ : expression(beta) 
$ :List of 1 
    ..$ : expression(gamma) 
$ :List of 1 
    ..$ : expression(x[1]) 

あります。両方がエラーメッセージを与えるこのような構造...(下図参照)

結果にunlist(r)unlist(r,recursive=FALSE)を適用すると、解析されたラベルの3つのすべてが

?label_parsed

を言う...最初の列に積み上げますということです

戻り値は各「行」 は、単一ファセットを特徴付ける長方形のリストでなければなりません。リストの要素は、 文字ベクトルまたはプロットマス式のリストのいずれかになります。複数 の要素が返されたとき、彼らは自分の新しい行 に表示されます(つまり、各ファセットは、ラベルの複数行のストリップを取得します)。

セットアップ:ロード・パッケージ、ラベルに古いものと新しいラベルを定義

library(ggplot2); theme_set(theme_bw()) 
orig_sum_labs <- c("peak_time","peak_vir","eq_vir","rel_peak") 
new_sum_labs <- c("peak time","peak virulence","equilibrium virulence", 
        "relative peak") 
fake <- data.frame(f1=rep(orig_sum_labs,each=12), 
        f2=factor(rep(1:3,16),levels=1:3, 
          labels=c("beta","gamma","x[1]")), 
        x=rep(1:4,12),y=rep(1:4,12)) 

プット改行:

nn <- gsub(" ","\n",new_sum_labs) 
fake$f1 <- factor(fake$f1,levels=orig_sum_labs,labels=nn) 

マイラベラー機能:

L <- function(labels,multi_line=TRUE) { 
    r <- if (all(grepl("\n",labels[[1]]))) { 
     list(as.character(labels[[1]])) 
    } else { 
     label_parsed(labels[[1]],multi_line=multi_line) 
    } 
    ## browser() 
    return(r) 
} 
class(L) <- "labeller" 

はそれを試してみてください:

ggplot(fake,aes(x,y))+geom_point()+ 
    facet_grid(f1~f2,labeller=L) 

enter image description here

+0

私はこれを解決しました(下記参照)。それが役に立たないと思われる場合、私はそれを削除することができます... –

答えて

3

おっと。ちょっと魔法がかかっています(そしてのことを明確に説明しているの回答を喜んで受け入れるでしょう)が、私は私の問題を解決することができました。上記の私のラベラー機能では、

label_parsed(labels[[1]],multi_line=multi_line) 

は動作しますが、

label_parsed(labels,multi_line=multi_line) 

作品はありません...

enter image description here

関連する問題

 関連する問題