2012-05-10 21 views
6

在这种情况下,一切都很好:有什么办法可以用ggplot 2来使用Identify命令吗?

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

'ggmap'包中的'gglocator'和'?geom_text'的组合应该给你你想要的,但不如识别那么好。你必须写出你传递给'geom_text'的x,y坐标和文本的数据框。如果有更好的方式,我很喜欢它。 –

+0

谢谢泰勒。我会尝试你的组合! –

+0

@DaviMoreira,[这将工作在你的情况](http://stackoverflow.com/questions/9505495/identify-points-in-scatterplot-qplot/9505920#9505920)? –

回答

5

这里是一个作品只使用gridggplot2包的方法:

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) 

如果你想有一个文本标签,而不是数你可以在通话的东西,如letters[w]更换wgrid.text(或无论您想要什么标签的矢量)。

如果你打算做几个这样的事情,那么你可以用一个函数来包装它,最后几行可能在一个循环中。你也可以添加附加逻辑来警告,如果你不点击一个点附近(比如识别),或者将标签移近或者离点更近(这个版本将标签放在最近的数据点的标签点上) 。

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有用的...但不知道如何改写识别...但;-)

7

您可以通过使用功能ggplotly从包plotly转换您的情节,与ggplot2交互式图形制作,例如:

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() 

然后将光标移到兴趣点,并找到有关它的信息。

相关问题