2012-02-02 19 views
5

私は、次のデータを持っている:日付の目盛りに沿ってグリッドを配置

x=strptime(20010101:20010110) 
y=1:10 
z=data.frame(x,y) 

だから私のデータはこれです:

plot(x,y) 
grid(NULL,NULL) 
を:私は使用してベースのグラフを作成するとき

  x y 
1 2001-01-01 1 
2 2001-01-02 2 
3 2001-01-03 3 
4 2001-01-04 4 
5 2001-01-05 5 
6 2001-01-06 6 
7 2001-01-07 7 
8 2001-01-08 8 
9 2001-01-09 9 
10 2001-01-10 10 

縦のグリッドが日付の目盛りと揃っていません。私はこれがかなり単純な問題のように思えますが、私はどこにでもこの解決策を見いだせませんでした。これを行うために私を必要としないベースを使用して日付の目盛りと整合する垂直グリッドを取得する方法はあります:

abline(v=as.numeric(strptime(c(20010102,20010104,20010106,20010108,20010110),'%Y%m%d'))) 

私は別の日付とプロットの多くを持っていると私は本当に自動化したいと思いますこれは可能な限り多く、うまくいけばベースを使用しています。

答えて

3

ablineは日付が(のstrptime経由)あなたのPOSIXltベクターからダニ抽出することができます。

x=strptime(20010101:20010110,format="%Y%m%d") 
y=1:10 

plot(x,y) 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = par("lwd")) 

水平グリッドと垂直グリッドの両方を追加する独自の関数を作成することをおすすめします。

my.grid <-function(){ 
grid(nx=NA, ny=NULL) 
abline(v=axis.POSIXct(1, x=pretty(x)),col = "lightgray", lty = "dotted", lwd = 
par("lwd")) 
} 

plot(x,y) 
my.grid() 
1

私はベースプロットの複雑さに精通していません。しかし、ggplotはこれを効果的に行います。

x <- strptime(20010101:20010110, format='%Y%m%d') 
y <- 1:10 
z <- data.frame(x, y) 
qplot(x,y,data=z,'point') 
6

機能axisは、自分の軸を描画マークや目盛りラベル、およびベクターとしての目盛り位置を返します。

あなたがDateデータを持っているので、あなたがこれを行うにはaxis.Dateを使用して、グリッドをプロットしablineを使用する必要があります。

z=data.frame(
    x=seq(as.Date("2001-01-01"), by="+1 month", length.out=10) 
    y=1:10 
) 
plot(y~x, data=z) 
abline(v=axis.Date(1, z$x), col="grey80") 

enter image description here

+0

ありがとうございました!私はどのようにRですべてを行うための80の異なる方法が大好きです:) – thequerist

3

以上あれば?gridヘルプファイルは」、言うように微調整が必​​要です、あなたはabline(h = ., v = .)を直接使用することができます。もう少し作業はしますが、それほど多くはありません。頻繁に使用したい場合は、関数にまとめておくのは簡単です。ここで

はそれを行うための一つの方法です:

plot(x,y) 
abline(v = pretty(extendrange(z$x)), 
     h = pretty(extendrange(z$y)), 
     col = 'lightgrey', lty = "dotted") 
points(x,y, pch=16) 

enter image description here

+0

ありがとう、どのように拡張範囲は何についての情報を取得しましたか?私は複数の答えを受け入れることができたらいいと思っています。私はP Lapointeにそれを渡しました。 – thequerist

+0

問題ありません。もう少し詳しく知るには '?extendrange'をチェックしてください。関数をプロットしてx軸とy軸の範囲を決定する関数です。 (プロット(1:10)とプロット(1:10、xaxs = "i") 'を比較すると意味が分かります) –

+0

ありがとう、私は'?extend_ed_range'と入力し続けていて、 。 – thequerist

関連する問題