3

Rプロットがあり、ユーザーがグラフ上のスポットをクリックできるようにしたいのですが、クリックした場所を知りたいのですが。マウスリスナーのようなものです。RStudioを使用しています。これはどうにか可能ですか?基本的に、彼らがクリックしたポイントについて、そのポイントに関する詳細を含む別のプロットを表示したいと思います。

これが私が持っているものです:

data <- data.frame(x=c(1,2,3,4,5),y=c(1,2,3,4,5))
x11()
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
  x11()
  plot(c(1,2,3),c(5,6,7))
}

loc <- locator(n=1)
if(loc$x > 2) {
  x11()
  plot(c(4,5,6),c(5,6,7))
}

したがって、5つのデータポイントを持つ最初のプロットが表示されます。ユーザーがx値2を超えてクリックした場合、別のプロットを開きます。これは、リストされているデータポイント(3つのデータポイント)をプロットします。次に、そのプロットを閉じて、元の5データポイントプロットをもう一度2回クリックすると、2番目のifステートメントに表示される3データポイントで新しいプロットが開きます。

しかし、それは私にエラーとI/Oの問題を与えています。

4

2 に答える 2

3

(これは完全な答えではありませんが、コメントとしてはあまり適切にフォーマットされないことを理解しています。)特定のデバイスをアクティブデバイスにするには、その番号を決定する必要があります。コードを実行した後、デバイスのリストを取得して、最初のX11デバイスを最新のものに設定できます

dev.list()
#quartz    X11 quartz    X11    X11 
#     2      3      4      5      6 
dev.set(3)
#X11 
#  3 

だからこれを試してみてください:

x11() ; first.ID <- dev.cur()
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
  x11() ; second.ID <- dev.cur()
  plot(c(1,2,3),c(5,6,7))
}
dev.set(first.ID)
loc <- locator(n=1)
if(loc$x > 2) {
  x11() ; third.ID <- dev.cur()
  plot(c(4,5,6),c(5,6,7))
}

私のマシンでは、Mac Guiがアクティブなデバイスを前面に表示しないため、最初のグラフィックウィンドウのタイトルをクリックして表示する必要があります。

于 2011-10-23T13:57:03.863 に答える
0

locator()これは、組み込みのプロットペインに対して呼び出しを実行する場合、RStudioで正常に機能します。locatorRStudioで問題を引き起こすのはX11に対する呼び出しだと思います。X11詳細情報をプロットした後、を呼び出しdev.set(0)てRStudioプロットペインを再度アクティブにします。

data <- data.frame(x=c(1,2,3,4,5),y=c(1,2,3,4,5))
plot(data)

loc <- locator(n=1)
if(loc$x > 2) {
        x11()
        plot(c(1,2,3),c(5,6,7))
}

dev.set(0)

loc <- locator(n=1)
if(loc$x > 2) {
        x11()
        plot(c(4,5,6),c(5,6,7))
}

(正直なところ、なぜdev.set(0)機能するのかわかりません。RStudioグラフィックデバイスを作成した開発者に確認する必要があります。)

于 2011-12-01T01:22:18.740 に答える