0

R について私を最も悩ませていることの 1 つは、プロット、ポイント、およびライン コマンドの分離です。最初に行ったプロットのバリアントにプロットを変更しなければならず、最初に正しい ylim と xlim を設定できなかった場合にゼロから再プロットしなければならないのは、ややイライラします。次のような 1 つのコマンドがあればいいと思いませんか。

  1. plot(..., type = "l")?のように、引数を介して線、点、またはその両方を選択します。

  2. デフォルトでは、現在のデバイスが空かどうかに応じて、新しいプロットを作成するか、既存のプロットに追加するかを選択します。

  3. プロットに追加された要素が現在の境界を超える場合、軸を自動的に再スケーリングします。

誰かがこのようなことをしましたか?そうでない場合、そしてこれが不可能な強い理由がない場合、私はこれに少し答えます...

4

2 に答える 2

1

あなたが望むものに役立つかもしれないいくつかの可能な機能:

このmatplot関数はベース グラフィックスを使用し、1 つのステップで複数の点または線のセットをプロットし、1 つのステップで正しい範囲を計算します。

updateプロット内のものを追加/変更するために使用できる格子グラフィックスの方法があり、その結果、制限や軸などの自動再計算が行われます。

( を使用して) ggplot2 プロットに追加情報を追加する+と、自動的に計算されるものが再計算されます。

あなたはすでに見つけzoomplotており、あなたがしたように独自の関数を書くアプローチが常にあります。

于 2012-10-23T16:52:34.120 に答える
0

とにかく、これは私が思いついたものです: (それはzoomplotfromを使用しますTeachingDemos)

 fplot <- function(x, y = NULL, type = "l", new = NULL, xlim, ylim, zoom = TRUE,...){
   require(TeachingDemos)
   if (is.null(y)){
if (length(dim(x)) == 2){
    y = x[,2]
    x = x[,1]
} else {
       y = x
       x = 1:length(y)
     } 
}

   if ( is.null(new) ){
   #determine whether to make a new plot or not
   new = FALSE
   if (is.null(recordPlot()[[1]])) new = TRUE
   }
   if (missing(xlim)) xlim = range(x)
   if (missing(ylim)) ylim = range(y)

   if (new){
   plot(x, y, type = type, xlim = xlim, ylim = ylim, ...)
   } else {
    if (type == "p"){
        points(x,y, ...)
    } else {
        lines(x,y, type = type, ...)
    }
    if (zoom){
    #rescale plot
    xcur = par("usr")[1:2]
    ycur = par("usr")[3:4]
    #shrink coordinates and pick biggest
    xcur = (xcur - mean(xcur)) /1.08 + mean(xcur)
    ycur = (ycur - mean(ycur)) /1.08 + mean(ycur)
    xlim = c(min(xlim[1], xcur[1]), max(xlim[2], xcur[2]))
    ylim = c(min(ylim[1], ycur[1]), max(ylim[2], ycur[2]))
    #zoom plot
    zoomplot(xlim, ylim)
    }
   }
 }

だからあなたはすることができます、例えば

dev.new()
fplot(1:4)
fplot(1:4 +1, col = 2)
fplot(0:400/100 + 1, sin(0:400/10), type = "p")
dev.new()
for (k in 1:20) fplot(sort(rnorm(20)), type = "b", new = (k==1) )

par(mfrow) と対数軸は現在、ズームでうまく機能しませんが、それは始まりです...

于 2012-10-23T10:15:55.823 に答える