2016-09-03 10 views
0

通常の軸では、axTicksでティック値を取得できます。 xがDateの場合、この試行は失敗します。日付軸で軸ティックを取得する方法

x <- sort(sample(seq(as.Date("2000-01-01"), as.Date("2010-12-31"), by=1), 50)) 
y <- runif(50) 
plot(y~x, type="l", col="steelblue") 

axTicks(1) 
abline(v=axTicks(1)) 

axTicksは値を返しますが、明らかに最終的に使用される値ではありません。使用されたダニをどうやって得ることができますか?

答えて

2

プロットのティック位置はaxis.Dateで作成されていると思います。位置を取得するには、独自の機能でaxis.Dateの関連部分をコピーすることができます:あなたは対照的にのソースを見れば

dateTicks <- function(x, side = 1) { 
## This functions is almost a copy of axis.Date 
    x <- as.Date(x) 
    range <- par("usr")[if (side%%2) 
     1L:2L 
     else 3:4L] 
    range[1L] <- ceiling(range[1L]) 
    range[2L] <- floor(range[2L]) 
    d <- range[2L] - range[1L] 
    z <- c(range, x[is.finite(x)]) 
    class(z) <- "Date" 
    if (d < 7) 
     format <- "%a" 
    if (d < 100) { 
     z <- structure(pretty(z), class = "Date") 
     format <- "%b %d" 
    } 
    else if (d < 1.1 * 365) { 
     zz <- as.POSIXlt(z) 
     zz$mday <- 1 
     zz$mon <- pretty(zz$mon) 
     m <- length(zz$mon) 
     m <- rep.int(zz$year[1L], m) 
     zz$year <- c(m, m + 1) 
     z <- as.Date(zz) 
     format <- "%b" 
    } 
    else { 
     zz <- as.POSIXlt(z) 
     zz$mday <- 1 
     zz$mon <- 0 
     zz$year <- pretty(zz$year) 
     z <- as.Date(zz) 
     format <- "%Y" 
    } 
    keep <- z >= range[1L] & z <= range[2L] 
    z <- z[keep] 
    z <- sort(unique(z)) 
    class(z) <- "Date" 
    z 
} 

あなたはそれがaxp = par("xaxp")seq.int(axp[1L], axp[2L], length.out = 1L + abs(axp[3L]))に沸く日付のものを見ることができます。つまり、日付を数値に変換し、結果の範囲を均等に分割するだけです。

+0

ええと、今度は軸が一度コンフィグレーションに使用されたxのクラスについて知らないと分かります... あなたのソリューションはありがとう、私はこのコードを関数axTicks.Dateに入れます。 –

関連する問題