有没有办法在ggplot 2中使用Identify命令?

时间:2012-05-10 00:29:06

标签: r ggplot2

在这种情况下,一切正常:

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图中的特定点?

3 个答案:

答案 0 :(得分:9)

您可以使用ggplot2包中的函数ggplotly将使用plotly制作的地图转换为互动图表,例如:

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

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

答案 1 :(得分:6)

以下是仅使用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 )

如果您想要一个文本标签而不是数字,那么您可以使用w(或任何您想要的标签矢量)调用grid.text来替换letters[w]

如果你要做其中的几个,那么你可以将它包装在一个函数中,最后几行可能在循环中。您还可以添加附加逻辑来警告,如果您没有在点附近点击(如识别确实)或将标签移动距离点更近或更远(此版本将最近数据点的标签放在您单击的点)

答案 2 :(得分: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个是有用的...但是不知道如何重写身份...但是; - )