2017-07-13 12 views
0

短いストーリーで、私はx軸に値が互いに交差する2つの異なる変数を持つプロットのタイプを作成しています最小の例では、a = 1,2、b = 1:5)。私は、別の変数(y軸上の変数)がaとbの両方の関数としてどのように変化するかを示したいと思います。私がしようとしているのは、ラベルの第2グループ(この場合は "b"変数)を自動的に配置する方法です。ここでは、最小限の例です:積み重なった軸ラベルを軸にした軸の「線」を自動的に選択R

次のグラフィック生成
set.seed(1) 
par(mar=c(7,3.5,1,1)) 
plot(1:10, 1:10+runif(10, -1, 1), xaxt="n", xlab="", ylab="", type="o") 
axis(1, 1:10, rep(c("a=1", "a=2"), 5), las=2) 
axis(1, seq(from=1.5, to=9.5, by=2), paste0("b=", 1:5), las=2, line=2, lwd=0) 

:この場合 enter image description here

を、私はラッキーだと正しい配置として「行を= 2」を選びました。私は物事を少し(と私の変数はもう少し「かさばる」ラベル作成)変更した場合でも:

set.seed(1) 
par(mar=c(7,3.5,1,1)) 
plot(1:10, 1:10+runif(10, -1, 1), xaxt="n", xlab="", ylab="", type="o") 
axis(1, 1:10, rep(c("Control", "Treatment"), 5), las=2) 
axis(1, seq(from=1.5, to=9.5, by=2), paste0("b=", 1:5), las=2, line=2, lwd=0) 

を今すぐラベルのグループが重なっ:

enter image description here

は自動的に方法はあります軸が "線"であるかどうかを判断して、最初のラベルと重ならないようにラベルの2番目のグループを配置できますか?

+0

あなたは 'ggplot2'を使用して考えたことはありますか? –

+0

@AndrewBrēza - 私はしていません。そんなことをすることはできますか? – dfife

+0

これは一般に、スーパーカスタマイズされたプロットを作成しようとしている場合に行く方法です。 –

答えて

1

あなたが試してみたいことがあります。あなたが指摘したように信頼性の低いlineを使用する代わりに、sprintfを使用して2番目の軸の呼び出しに空白を埋め込むことができます。以下では、まず最初の軸の呼び出しで最大文字数を計算し、2.5を掛けます。この場合はうまくいくようです。これを微調整したいかもしれません。次に、デフォルトのline=1を使用しますが、空白は2番目の軸の呼び出しを軸線から「押し込む」でしょう。ところで、max(nchar(first axis)) + max(nchar(second axis))のような何かをしてパディングを計算したいかもしれません。最後に、sprintfの中の " - "記号は、右に空白を追加することを意味します。

set.seed(1) 
par(mar=c(7,3.5,1,1)) 

max_nchar <- max(nchar(rep(c("Control", "Treatment"), 5))) *2.5 

plot(1:10, 1:10+runif(10, -1, 1), xaxt="n", xlab="", ylab="", type="o") 
axis(1, 1:10, rep(c("Control", "Treatment"), 5), las=2) 
axis(1, seq(from=1.5, to=9.5, by=2), 
sprintf(paste0("%-",max_nchar,"s"), paste0("b=", 1:5)), las=2, lwd=0) 

enter image description here

+0

私はそれが動作するかもしれないと思うが、私は少し問題があります。私が書いている関数では、実際のラベルは「スキュー」です。それはそれを台無しにするようだ。ですから、sprintf(paste0( "% - "、max_nchar、 "s")、paste0( "skew ="、1:5))を実行すると、1-5のない "skew ="などとなります。なぜどんなアイデア? – dfife

+0

さて、私はそれを分かりました。文字間隔が不足しているようです。 max_ncharの倍数を小さい数値に変更すると、それが固定されました。 – dfife

関連する問題