2016-08-15 4 views
1

私は通常のplot()をRで使用しています。値 "0"のラベルのみがPlot()内のティックの中心にはありません

は、しかし、他のすべてがOK探しているのに対し、値が「ゼロ」のラベルが正しく、対応する目盛りを中心に揃え(センタリング)されていないことが起こります。 (は、スクリーンショットは、以下のリンクを参照してください。

  • をそれだけでたまたま、私が使用している場合、 "科学的= FALSE" 形式(...)で
  • 私は "=科学的TRUE" を使用する場合には、正しいよう

ゼロは中央に配置されずに右に揃えられ、Rは他の大きな数字(「100 000」など)と同じ桁数で「ゼロ」があると信じています「0 000」だけではなく「000 000」が中央に揃えられます。私にできることは容易

何か?

最小限の実施例:

plot(x=NULL, y=NULL, xlab="xlab", ylab="ylab" 
     , xlim=range(2007:2014), ylim=range(0:500000), axes=FALSE) 
     box() 
     ticks_x <- pretty(2007:2014,n=6) 
     ticks_y <- pretty(0:500000,n=8) 

     labels_x <- format(ticks_x) 
     labels_y <- format(ticks_y , big.mark = " " , decimal.mark=",", scientific=FALSE) 

     axis(1, at = ticks_x, labels = labels_x) 
     axis(2, at = ticks_y, labels = labels_y) 

スクリーンショット:

enter image description here

enter image description here

任意の提案方法を "中央" "ゼロ" に、科学的なモードが使用されていない場合?プロットは、ループ内に作成されるため

「テキストとして挿入」または同様と手動溶液は、不可能である、とのみ時にはゼロが発生するが、それは常に間違って整列されます。

ありがとうございます!

答えて

2

軸ラベルは文字列です。あなたの現在のlabels_yでチェックを持っている:

#[1] "  0" " 50 000" "100 000" "150 000" "200 000" "250 000" "300 000" 
#[8] "350 000" "400 000" "450 000" "500 000" 

あなたは0のラベルが" 0"であるという理由だけで、望ましくないアライメントを取得します。

labels_y[1] <- " 0 " 
## or simply: labels_y[1] <- "0" 
axis(2, at = ticks_y, labels = labels_y) 

enter image description here

+0

良い点は、常に同じ長さです(50kラベルを参照)。その行動の理由はありますか?おそらく 'gsub("^\\ s + | \\ s + $ "、"、labels_y) '(先頭と末尾の空白を削除する)を使うと便利です。 – Christoph

+0

@ ZheyuanLi:はい、あなたはポイントを持っています。ラベルに "空の"スペースを削除する方法があるので、 "----- 0" - > "0"にしますか? (「 - 」は空白を表します)。 – therob

+0

@Christoph:OK、あなたの意見があります。しかし、if(...)の場合を導入して、そこに「0」があるかどうかをチェックする必要があります。 AND:ループ内にたくさんのプロットを作成します。ですから、 " - 0--"や "---- 0 ----"や "-0 - "のように認識を自動化する方法を理解する必要があります。他の考え? – therob

0

だけaxis(2, at = ticks_y-50000, labels = labels_y)を使用しています。自動化したい場合は、par( "usr")を使用して範囲に応じて移動することができます。

+1

しかし、ヨーヨー完全なラベルとティックを-50000シフトすることをお勧めします。これは私の意図ではありません。質問は、すべての数字(「0」を含む、displaydが「0」または「000000」であるかどうかは関係ありません)が適切に調整され、対応するティックの周りに集中していることを伝える方法です。 – therob

1

最終的な解決策:この問題はで固定することができ、「labels_y <間... ...

[...] 
    labels_y <- format(.... 
if(as.numeric(ticks_y[1]) == "0"){labels_y[1] <- "0"} 
    axis(2,.... 
[...] 

を紹介

- ... "および『軸(...』トリックを行います!

関連する問題