8

この場合、すべて問題ありません。

x <- 1:10 
y <- x^3
plot(x, y)
identify(x, y)

しかし、qplot を使用すると、いくつかの問題があります。

x <- 1:10 
y <- x^3
qplot(x, y)
identify(x, y)

ggplot2グラフの特定のポイントにラベルを付けるための同様のコマンドまたは他の方法を知っている人はいますか?

4

3 に答える 3

12

package の関数を使用して、 で作成したプロットggplot2をインタラクティブなグラフに変換できます。ggplotlyplotly

library(ggplot2)
library(plotly)

# Prepare data
x <- 1:10  
y <- x^3 
names <- paste("Point", LETTERS[x])

# Make a plot with `ggplot` as usual
qplot(x, y, label = names) 

# Convert it to interactive plot
ggplotly()

次に、関心のあるポイントにカーソルを移動して、そのポイントに関する情報を見つけます。

于 2016-03-23T17:29:26.433 に答える
7

gridおよびggplot2パッケージのみを使用して機能するメソッドは次のとおりです。

library(ggplot2)
library(grid)

x <- 1:10  
y <- x^3 
qplot(x, y) 

downViewport('panel-3-4')
pushViewport(dataViewport(x,y))

tmp <- grid.locator('in')
tmp.n <- as.numeric(tmp)
tmp2.x <- as.numeric(convertX( unit(x,'native'), 'in' ))
tmp2.y <- as.numeric(convertY( unit(y,'native'), 'in' ))

w <- which.min( (tmp2.x-tmp.n[1])^2 + (tmp2.y-tmp.n[2])^2 )
grid.text(w, tmp$x, tmp$y )

番号の代わりにテキストラベルが必要な場合wは、呼び出しで次のgrid.textようなものletters[w](または任意のラベルのベクトル)に置き換えることができます。

これらのいくつかを実行する場合は、これを関数でラップし、最後の数行をループにすることができます。ポイントの近くをクリックしない場合に警告する追加のロジックを追加したり(識別のように)、ラベルをポイントに近づけたり遠ざけたりすることもできます(このバージョンでは、クリックしたポイントに最も近いデータポイントのラベルが配置されます) 。

于 2012-05-10T19:00:15.550 に答える
2

ggplot 内で識別機能を使用するためのちょっとした回避策を作成しました

df <- data.frame(x=c(1.8,2.1,3.1,2.8,3.1,4.9,5.1,3.2,2.2),
    y=c(3.2,2.3,4.1,5.2,3.1,2,1.9,2.1,3),
    name=c('agw452','hhewhdsgwgb','cgahawrhs','gsarhrwhd','ehhrwhrwwrw','fhhrwwrw','ghhWwr','hhHRWRHwr','ihwhrHWRHw'))
plot(df$x,df$y)
identified <- identify(df$x,df$y,labels=df$name,pos=T)
df$pos <- NA
df[identified$ind,]$pos <- identified$pos
ggplot(df,aes(x=x,y=y)) + geom_point() + 
    geom_point(data=subset(df,!is.na(pos)),aes(color='red')) +
    geom_text(data=subset(df,pos == 1),aes(label=name),vjust=1) + 
    geom_text(data=subset(df,pos == 2),aes(label=name),hjust=1) +
    geom_text(data=subset(df,pos == 3),aes(label=name),vjust=-.5) + 
    geom_text(data=subset(df,pos == 4),aes(label=name),hjust=0)

クリックのインデックスと位置を使用し、プロット関数と同じ位置にラベルを配置します...

それが役立つことを願っています...

4つだけよりも多くの位置を持つと便利です...しかし、識別を書き換える方法がわかりません...まだ;-)

于 2014-08-25T14:49:24.037 に答える