2

孤立した R ライブラリ ( wmtsa ) を使用しています。wavCWT()その関数の 1 つは、ウェーブレット オブジェクトを返す連続ウェーブレット変換 ( ) を作成し、従来のplot()関数を呼び出してプロットできます。残念ながら、関数の書き方では、いくつかの典型的なプロット パラメータを変更することができません。特に、設定できず、axes=F常に軸をプロットする必要があります。デバイスにレイヤーを追加したいのですが、軸が異なり、オフセットされているため、これは役に立ちません。

plot() 関数を呼び出しているメソッドに引数を渡す方法はありますか?

これが不可能な場合は、ソース コードを変更する必要があります。この場合、この種のオブジェクトのメソッドを変更するにはどこを見ればよいでしょうか?

メソッドのソースは見つかりましたが、私のハッキング スキルは限られており、少し迷っています。

例:

 library(wmtsa)   # assuming you have installed the package wmtsa
 wavCWT(sin(rnorm(1000)))
 plot(W, power.stretch=0.5)

このプロットを生成します:

ここに画像の説明を入力

しかし、軸を削除しようとするとaxes=F、次のメッセージが表示されます。

plot(W, power.stretch=0.5, axes=F)
Error in plot.default(NA, NA, xlim = xlim, ylim = ylim, type = "n", xaxs = xaxs,  : 
formal argument "axes" matched by multiple actual arguments
4

3 に答える 3

2

ソースを変更する必要がありますが、ごくわずかです。の269〜270行目でwav_xform.Rplot.wavCMT関数内で次の行を変更します。

image(data$x, data$y, imageScale(data$z, power.stretch=power.stretch), ...,
  xlab=xlab, ylab=ylab, axes=TRUE)

image(data$x, data$y, imageScale(data$z, power.stretch=power.stretch), ...,
  xlab=xlab, ylab=ylab)

その理由は、省略記号(...)-「関数に余分な引数を取り、plotそれらを関数に渡す」ことを意味しimageます。ただし、元のコードaxes=TRUEにも含まれているため、パスしようとするとaxes=FALSEエラーが発生しformal argument "axes" matched by multiple actual argumentsます。

次に(再インストールすると)、軸を取り除くために次の作業が行われます。

library(wmtsa)
sunspots.cwt <- wavCWT(sunspots)
plot(sunspots.cwt)  # has axes
plot(sunspots.cwt, axes=FALSE)  # does *not* have axes

また、省略記号のおかげで、他の一般的なプロットパラメータを変更できることにも注意してください。(これは、ソースを変更したことがない場合でも当てはまります)。例えば:

plot(sunspots.cwt, main="My great wavelet plot")  # change title
plot(sunspots.cwt, xlim=c(1750, 1850))  # change x axis range
plot(sunspots.cwt, ylim=c(0, 2))  # change y axis range
于 2013-01-25T17:03:49.250 に答える
2

wmtsaパッケージは、plotclass のオブジェクト専用のメソッドを定義しますwavCWT。これは S3 メソッドであるため、呼び出さplot.wavCWTれますが、このコマンドで示されるように (パッケージのロード後) 非表示として宣言されます。

methods(plot)

デフォルトでは、R では、関数の名前を括弧なしで入力するだけで関数のソースを取得できます。しかし、関数が見えないため、ここでは機能しません。だからあなたがしなければならない:

getAnywhere(plot.wavCWT)

できることの 1 つは、ソース コードをコピーしてから、関数を次のように再定義することです。

plot.wavCWT <- function (x, xlab = NULL, ylab = NULL, logxy = "y", power.stretch = 0.5, 
phase = FALSE, series = FALSE, series.ylab = "", zoom = NULL, 
type = "image", grid.size = 100, add = FALSE, theta = 120, 
phi = 30, ...) {
    ...paste your original code here...
}

その後、必要に応じて元のコードを変更し、関数定義を実行してスクリプトで使用できるようにします。

ニーズに合わせて変更する必要があるかどうかは完全にはわかりませんが、関数定義に次のブロックがあります。

        plot(series.time, x.series[itime], type = "l", col = "blue", 
            axes = TRUE, xlim = range(series.time), ylab = series.ylab, 
            xlab = "", xaxt = "n", xaxs = "i")

その後、 に変更axes=TRUEするaxes=FALSEか、さらに良いことplotaxes=TRUEに、関数定義に引数を追加してから に変更axes=TRUEできaxes=plotaxesます。

于 2013-01-25T17:07:32.670 に答える