Вопрос по r, ggplot2 – Есть ли способ использовать команду Identify с ggplot 2?

7

В этом случае все ок:

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

Но при использовании qplot есть некоторые проблемы:

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

Кто-нибудь знает подобную команду или другой способ маркировки определенных точек на графиках ggplot2?

Сочетаниеgglocator отggmap пакет и?geom_text должен дать вам то, что вы хотите, но не так красиво, как идентифицировать. Вам нужно изменить фрейм данных с координатами x, y и текстом, который вы передаетеgeom_text, Если есть лучший способ, я бы с радостью это сделал. Tyler Rinker
plotly::ggplotly() может быть полезным Примером являетсяhere. Vilmantas Gegzna
@DaviMoreira,would this work in your case? Eric Fail
Спасибо, Тайлер. Я попробую вашу комбинацию! Davi Moreira
Экс Экс, но нет. Я действительно хочу знать, возможно ли выбрать конкретные случаи, как это можно сделать с помощью команды идентификации. Davi Moreira

Ваш Ответ

3   ответа
6

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] (или любой другой вектор меток, который вы хотите).

Если вы собираетесь делать несколько из них, вы можете заключить это в функцию с последними несколькими строками, возможно, в цикле. Вы также можете добавить дополнительную логику, чтобы предупредить, если вы не щелкаете рядом с точкой (как это делает идентификатор) или перемещаете метку ближе или дальше от точки (эта версия размещает метку для ближайшей точки данных в точке, которую вы щелкаете) ,

8

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

Затем наведите курсор на интересующую вас точку и найдите информацию о ней.

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 ... Но не знаю, как переписать идентификацию ... пока ;-)

Похожие вопросы