1

データとモデルの結果をプロットするための gWidgets インターフェイスを開発する際に、プロット ページを作成し、par(mfrow=c(4,1))4 つのプロットを重ねて表示します。

最初のプロット (上部の単純な y 対 x) は正常に動作しますが、ループ内の残りの 3 つのプロットは軸を作成しますが、データをプロットしません。コードをテストするために、プロットをループする前に新しいプロット ウィンドウを開こうとしましたが、すべて正常に動作しました。

知っておくと便利なgwdigets相互作用がありますか?plot(...)

再現可能な例を編集します。

動作しません:

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
g <- ggroup(container=w)
gg <- ggraphics(container=g)

addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(2,2))
  plot(mpg ~ wt, mtcars)
  plot(mpg ~ wt, mtcars,col='blue')
  plot(mpg ~ wt, mtcars,col='red')
  plot(mpg ~ wt, mtcars,col='green')
})
visible(w) <- TRUE

次のようになります (通常の R グラフィックス ウィンドウ:

ここに画像の説明を入力

このようではない

ここに画像の説明を入力

4

2 に答える 2

1

何らかの理由で、プロットを更新できません。複数の ggraphics インスタンスを使用することも、使用することもできますggraphicsnotebook

の多くのインスタンスを使用したソリューションを次に示しますggraphics

library(gWidgets)
options(guiToolkit="RGtk2") ## "Qt"
w <- gwindow("brush example", visible=FALSE)
gg <- ggroup(container=w,horizontal=F,use.scrollwindow = T)
down.group <- ggroup(container = gg)
up.group <- ggroup(container = gg)

devs.up <- lapply(1:2, function(i) 
                 ggraphics(container=down.group,label=as.character(i)))
devs.down <- lapply(3:4, function(i) 
                 ggraphics(container=up.group,label=as.character(i)))
visible(w) <- TRUE
lapply(c(devs.up,devs.down), function(gg)
addHandlerChanged(gg, handler=function(h,...) {
  par(mfrow=c(1,1))
  plot(mpg ~ wt, mtcars)
}))
于 2013-02-12T18:27:23.450 に答える
1

2 つの問題があります。1 つは、Windows での cairo の実装に関連している可能性があります。これは、gWidgets を完全に回避することでテストできます。

make_plot <- function() {
  par(mfrow=c(2,2))
  plot(mpg ~ wt, mtcars)
  plot(mpg ~ wt, mtcars,col='blue')
  plot(mpg ~ wt, mtcars,col='red')
  plot(mpg ~ wt, mtcars,col='green')
}

require(RGtk2)
require(cairoDevice)

w <- gtkWindow(show=FALSE)
da <- gtkDrawingArea()
w$add(da)
w$show(TRUE)

asCairoDevice(da)

make_plot()

もう 1 つの問題は、グラフィック描画呼び出しをハンドラー内に配置することです。ggraphics の場合、変更ハンドラーは、グラフィック自体が変更されたときではなく、ラバー バンディングが終了した後に呼び出されます。これが最も便利なことかどうかはわかりませんが、ラバー バンディングによって選択が行われた後にハンドラーを呼び出すことを意図しています。addHandlerClicked の方が興味深いかもしれません。

于 2013-02-12T18:36:23.250 に答える