gpt4 book ai didi

r - R 中的格子封装 : Is it possible to develop an interactive "scatterplot/network"?

转载 作者:行者123 更新时间:2023-12-02 01:39:14 25 4
gpt4 key购买 nike

我正在开发一个交互式散点图,以便当用户将鼠标悬停在数据点上时,会显示一个标签。但是,我还想在某些数据点之间添加边缘。

我使用多个库(包括 grid、gridSVG、lattice 和 adegraphics)成功开发了交互式散点图。以下是 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")

生成的 .svg 文件实现了我想要的一切 - 除了我还希望添加某些非交互式边缘。在定义要映射的边缘和坐标后,我尝试通过合并 adegraphics 库中的 adeg.panel.edges 方法来实现此目的。所以,基本上我之前的 xplot(...) 函数被替换为:

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

这似乎只是删除了由原始 xyplot 制作的交互式散点图,并简单地输出静态边缘和坐标图像。

我尝试遵循 ( http://finzi.psych.upenn.edu/library/adegraphics/html/adeg.panel.nb.html ) 中的示例。具体来说,这个例子:

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

我对如何解决这个问题有点不知所措,特别是当我模仿示例代码时。非常感谢任何建议!

最佳答案

如果您尝试生成的是网络的节点链接图,则替代解决方案是将数据强制转换为 network 对象并使用 ndtv 包为您的网络生成 svg/htmlwidget 交互式绘图。 ndtv 包专为动态网络而设计,但也可为静态网络生成交互式绘图。

library(ndtv)
data(emon) # load a list of example networks
render.d3movie(emon[[5]]) # render network 5 in the browser

更多详细信息请参见教程 http://statnet.csde.washington.edu/workshops/SUNBELT/current/ndtv/ndtv-d3_vignette.html

但是,这根本不使用网格/点阵图形

关于r - R 中的格子封装 : Is it possible to develop an interactive "scatterplot/network"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com