Ich entwickle ein interaktives Streudiagramm, so dass beim Überfahren eines Datenpunkts durch einen Benutzer eine Beschriftung angezeigt wird. Ich möchte jedoch auch Kanten zwischen bestimmten Datenpunkten hinzufügen.Gitterpaket in R: Ist es möglich, ein interaktives "Streudiagramm/Netzwerk" zu entwickeln?
Ich bin erfolgreich bei der Entwicklung der interaktiven Streudiagramm mit mehreren Bibliotheken, einschließlich Gitter, GitterSVG, Gitter und adegraphics. Nachfolgend finden Sie eine 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")
Die resultierende SVG-Datei alles erreicht, denn ich bin mit dem Ziel - außer, dass ich möchte auch bestimmte nicht-interaktive Kanten hinzuzufügen. Ich habe versucht, dies zu tun, indem ich die adeg.panel.edges-Methode aus der adegraphics-Bibliothek einbezog, nachdem ich die Kanten und die zu kartierenden Koordinaten definiert hatte. Also, im Grunde meine xplot (...) Funktion aus, bevor dich mit Fassung:
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)))
Es scheint, dass dies einfach die interaktive Scatterplot aus dem ursprünglichen xyplot gemacht löscht, und gibt einfach den statischen Rand und Bildkoordinaten.
Ich habe versucht, das Beispiel zu folgen, wie in (http://finzi.psych.upenn.edu/library/adegraphics/html/adeg.panel.nb.html) gesehen. Insbesondere in diesem Beispiel:
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)})
Ich bin ein bisschen mit einem Verlust, wie dieses Problem zu beheben, vor allem weil ich den Beispielcode am nachahmt. Irgendwelche Vorschläge werden sehr geschätzt!
verwenden, ich bin auf der Suche über das Tutorial jetzt. Darf ich überprüfen: Könnte ein Benutzer Datenpunkte auf bestimmte Positionen auf der X- und Y-Achse beschränken? Was ich versuche, ist ein Streudiagramm mit Kanten in einer bestimmten Richtung (so dass jeder Datenpunkt einen festen x- und y-Wert hat und der Graph eine feste Menge von Kanten hat). Die einzige Interaktion, die ich möchte, ist, wenn ein Benutzer einen Datenpunkt rollt, werden Informationen über diesen Datenpunkt gedruckt. – luckButtered
können Sie definitiv eine Reihe von X- und Y-Koordinaten (als 2-Spalten-Matrix über das 'coord'-Argument) für die Scheitelpunkte übergeben. Ich bin mir nicht sicher, ob es möglich ist, die anderen Interaktionen zu deaktivieren (Zooming, Edge Hilite) – skyebend
Danke, ich werde mich darum kümmern! Ich halte die Frage auch offen, weil ich versuche, bei dem zu bleiben, was ich vorerst habe. Ich bin besonders neugierig, warum meine Syntax wegen des Beispielcodes nicht erfolgreich ist. Ich habe es gerade bearbeitet, um den exakten Beispielcode zu zeigen, anstatt einfach einen Link bereitzustellen, so dass zukünftige Responder sehen können, was ich versuche zu tun. Danke noch einmal. – luckButtered