Sto sviluppando uno scatterplot interattivo in modo che quando l'utente scorre su un punto dati, viene visualizzata un'etichetta. Tuttavia, vorrei anche aggiungere spigoli tra alcuni punti dati.Pacchetto reticolo in R: è possibile sviluppare un "diagramma a dispersione/rete" interattivo?
Sono riuscito a sviluppare lo scatterplot interattivo utilizzando diverse librerie, tra cui grid, gridSVG, reticolo e adegraphics. Di seguito è riportato un MWE:
library(grid)
library(gridSVG)
library(lattice)
library(adegraphics)
x = rnorm(10)
y = rnorm(10)
dat = data.frame(label = letters[1:10], x, y)
customPanel2 <- function(x, y, ...) {
for (j in 1:nrow(dat)) {
grid.circle(x[j], y[j], r = unit(.5, "mm"),
default.unit = "native",
name = paste("point", j, sep = "."))
}
}
xyplot(y ~ x, panel = customPanel2, xlab = "x variable", ylab=NULL, scales=list(tck = c(1,0), y=list(at=NULL)))
for (i in 1:nrow(dat)) {
grid.text(as.character(dat$label)[i], x = 0.1, y = 0.01, just = c("left", "bottom"), name = paste("label", i, sep = "."), gp = gpar(fontface = "bold.italic"))
}
for (i in 1:nrow(dat)) {
grid.garnish(paste("point", i, sep = "."), onmouseover = paste('highlight("', i, '.1.1")', sep = ""), onmouseout = paste('dim("', i, '.1.1")', sep = ""))
grid.garnish(paste("label", i, sep = "."), visibility = "hidden")
}
grid.script(filename = "aqm.js", inline = TRUE)
grid.export("interactiveScat.svg")
Il file SVG risultante compie tutto quello che sto puntando - solo che anche io desidero aggiungere alcuni bordi non interattivi. Ho provato a farlo integrando il metodo adeg.panel.edges dalla libreria adegraphics dopo aver definito i bordi e le coordinate da mappare. Quindi, in sostanza la mia funzione xplot (...) da prima viene sostituito con:
edges = matrix(c(1, 2, 3, 2, 4, 1, 3, 4), byrow = TRUE, ncol = 2)
coords <- matrix(c(x[1], y[1], x[2], y[2], x[3], y[3], x[4], y[4]), byrow = TRUE, ncol = 2)
xyplot(y ~ x, panel = function(customPanel2){adeg.panel.edges(edges, coords, lty = 1:4, cex = 5)}, xlab = "x variable", ylab=NULL, scales=list(tck = c(1,0), y=list(at=NULL)))
Sembra che questo cancella semplicemente il grafico a dispersione interattivo realizzato dalla xyplot originale, e semplicemente emette il bordo statica e immagine coordinata.
Ho cercato di seguire l'esempio visto in (http://finzi.psych.upenn.edu/library/adegraphics/html/adeg.panel.nb.html). In particolare, questo esempio:
edges <- matrix(c(1, 2, 3, 2, 4, 1, 3, 4), byrow = TRUE, ncol = 2)
coords <- matrix(c(0, 1, 1, 0, 0, -1, -1, 0), byrow = TRUE, ncol = 2)
xyplot(coords[,2] ~ coords[,1],
panel = function(...){adeg.panel.edges(edges, coords, lty = 1:4, cex = 5)})
Sono un po 'ad una perdita quanto a come risolvere questo problema, soprattutto perché sto imitando il codice di esempio. Ogni suggerimento è molto apprezzato!
Grazie, sto guardando oltre il tutorial in questo momento. Posso verificare: un utente può vincolare punti dati a determinate posizioni sugli assi xey? Quello che sto cercando di fare è avere un grafico a dispersione con i bordi in un certo senso (quindi ogni punto di dati ha un valore xey fisso, e il grafico ha una serie fissa di bordi). L'unica interazione che vorrei è se un utente si sposta su un punto dati, le informazioni su quel punto dati verranno stampate. – luckButtered
si può sicuramente passare in una serie di coordinate xey (come una matrice a 2 colonne tramite l'argomento 'coord') per i vertici/punti. Non sono sicuro se sia possibile disabilitare le altre interazioni (zoom, edge hilite) – skyebend
Grazie, lo esaminerò! Sto mantenendo la domanda aperta anche perché sto cercando di rimanere con quello che ho per il momento. Sono particolarmente curioso di sapere perché la mia sintassi non ha successo dato il codice di esempio. L'ho appena modificato per mostrare il codice esatto di esempio, piuttosto che fornire semplicemente un collegamento, in modo che i futuri soccorritori possano vedere cosa sto cercando di fare. Grazie ancora. – luckButtered