我正在尝试构建一个闪亮的应用程序,显示我在d3JS中编码的复杂的力网络图。这超出了我所能做的R包network3,我试过了。我想要引入我高度自定义的.js文件来处理显示,这就是我迷失的地方。
为了简单起见,让我们考虑从这里改编的最简单的力网络图:http://bl.ocks.org/sathomas/11550728 如果有人可以告诉我如何使用示例ui.R和server.R引入SimpleFN.js文件(见下文),然后我可以将方法扩展到更复杂的示例。我知道如何引入style.css文件。还没有显示对d3.min.js库(http://d3js.org/d3.v3.min.js)的必需引用,我也知道如何引用它。
我知道你在说什么:“这不是反应图!你为什么烦心?”我会到那里,相信我。 :)
非常感谢对这个最基本的例子的任何帮助!
干杯!
添
注意:交叉发布到Shiny Google Group,但迄今为止没有回复。
文件style.css:
.node {
fill: #ccc;
stroke: #fff;
stroke-width: 2px;
}
.link {
stroke: #777;
stroke-width: 2px;
}
文件SimpleFN.js:
var width = 640,
height = 480;
var nodes = [
{ x: width/3, y: height/2 },
{ x: 2*width/3, y: height/2 }
];
var links = [
{ source: 0, target: 1 }
];
var svg = d3.select('body').append('svg')
.attr('width', width)
.attr('height', height);
var force = d3.layout.force()
.size([width, height])
.nodes(nodes)
.links(links);
force.linkDistance(width/2);
var link = svg.selectAll('.link')
.data(links)
.enter().append('line')
.attr('class', 'link');
var node = svg.selectAll('.node')
.data(nodes)
.enter().append('circle')
.attr('class', 'node');
force.on('end', function() {
node.attr('r', width/25)
.attr('cx', function(d) { return d.x; })
.attr('cy', function(d) { return d.y; });
link.attr('x1', function(d) { return d.source.x; })
.attr('y1', function(d) { return d.source.y; })
.attr('x2', function(d) { return d.target.x; })
.attr('y2', function(d) { return d.target.y; });
});
force.start();
答案 0 :(得分:2)
如果d3.min.js
,style.css
和SimpleFN.js
个文件与ui.R
和server.R
文件位于同一目录中,则可以执行以下操作:
<强> ui.R 强>
library(shiny)
shinyUI(fluidPage(tags$head(includeScript("d3.min.js")),
includeCSS('style.css'),
mainPanel(uiOutput("chart"))
))
<强> server.R 强>
library(shiny)
shinyServer(function(input, output) {
output$chart <- renderUI({
includeScript('SimpleFN.js')
})
})
在我的机器上加载需要几秒钟。如果您不需要该部分被动反应,也可以直接在SimpleFN.js
中添加ui.R
脚本。