2012-01-23 19 views
4

私は動物園のオブジェクトを持っていて、年間インデックスは約50年です。いくつかの研究は私にこれを得たR/Zoo:毎年x軸に目盛りを表示します。

b=zoo(1:200,as.yearqtr(1900+seq(1,200)/4)) 
plot(b) 

:プロットすると、x軸は不毛ビットを感じており、10年ごとのラベルを示して、一方の極端から他に振るような感じ

plot(b,xaxt="n");axis(1,time(b)) 

x軸はダミーのぼかしで、醜い部分ラベルが付いています。それを単に年にする簡単な方法はありますか? (私が最初に探していたのは、「x軸ラベルの間隔を少し小さくする」という言い方でしたが、何もそうではありませんか?

答えて

4

あなたは読んでいましたか? help(axis)

R> ind <- seq(1, length(b), by=4) 

とインデックスにそれを使用して軸配置ラベル

R> plot(b,xaxt="n") 
R> axis(1,time(b)[ind], format(time(b)[ind]), las=2, cex.axis=0.5) 

enter image description here

ここ

は、すべての四方には、単純なインデックスを作成し、一つの方法であります

私はlas=2を使用し、下位のcexこの値を適合させるための値。一度毎年はまだあまりにもたくさんあるかもしれません。

"良い"軸ラベルを計算することは本当に難しいです。

+0

私はヘルプページを読みました、そして、それはかなり混乱したおかげ@Dirk。しかし、私は、この正解よりも単純なものがあることを期待していました。むしろ低レベルのようです。 (良い軸ラベルの計算は難しいですが、不可能ではないので、Rプロジェクトの誰もまだそれに取り組んでいないことに驚いています)。 –

+0

もちろん、様々なaxis()関数のコードを参照してください。プロット方法。しかしそれはそれがまだ難しいという事実から逃れることはありません。さて、このような仕事のために、私が示した基本的な軸()の使用はまだ可能です。 –

1

これはおそらく、データをよりよく表示するためにグリッドを使用する場合と、グリッドを使用したい場合(まれな状況)の1つです。 @ dirk-eddelbuettelが指摘しているように、良い軸ラベルを調整するのは難しく、特にそのような密度では困難です。また、ラベルをプロット内に配置して、グリッドが密度をわずかに隠すようにすることもできます。あなたがggplot2で遊びたいのでなければ、得られる最も簡単なグリッドはablineですが、R(個人的意見)の標準プロットはもっと醜いです。また、プロットを広げる。実際には、あまりにも、プロットの周りにボックスを取り除くために良いでしょう。)以下はディルクのアプローチのMODです:

png("strangeplot.png",width=800) 
#extend y-axis to fit inside labels and remove box 
plot(b,type="n",xaxt="n",yaxt="n",ylab="",xlab="",ylim=c(min(b)-30,max(b)),bty="n")) 
#use 'mpg' to get labels inside 
axis(1,time(b)[ind], format(time(b)[ind]), las=2, cex.axis=0.6,tick=F,mgp=c(0,-2.5,0)) 
axis(2,tick=F,las=1) 
#you locate lines slightly to the left of label... 
abline(h=seq(0,200,by=50),v=time(b)[ind]-0.5,col=gray(0.9)) 
#...so you need to add extra single line in the end 
abline(v=max(time(b)[ind])+0.5,col=gray(0.9)) 
#plot at the end to get it above grid 
points(b,type="l") 
dev.off() 

enter image description here

+0

ありがとう@GeekOnAcid私の最初の質問は、私が自分自身に答えたgrid()を使わない理由でした(デフォルトの軸ラベルでうまくいく)。しかし、ラベルがどのデータポイントとつながっているかは明確ではありません。ライン間、またはラインの左右どちらかにありますか? –

+0

@DarrenCookこの解決法では、日付の点は線の間にありますが、ラベルの上から始めるように、それをシフトして、 'abline'で縦線を定義することができます。 –

関連する問題