小编Fra*_*sKR的帖子

获取箭头指向D3中节点的外边缘

我是D3的新手,我正在尝试创建一个交互式网络可视化.我复制了这个例子的大部分内容,但是我已经使用SVG"行"而不是"路径"将曲线更改为直线,并且我还根据它们所代表的数据来缩放节点.问题是我的箭头(用SVG标记创建)位于线的末端.由于某些节点很大,箭头会隐藏在它们后面.我希望我的箭头显示在他们指向的节点的外边缘.

以下是我创建标记和链接的方法:

svg.append("svg:defs").selectAll("marker")
    .data(["prereq", "coreq"])
    .enter().append("svg:marker")
    .attr("id", String)
    .attr("viewBox", "0 -5 10 10")
    .attr("refX", 15)
    .attr("markerWidth", 6)
    .attr("markerHeight", 6)
    .attr("orient", "auto")
    .append("svg:path")
    .attr("d", "M0,-5L10,0L0,5");

var link = svg.selectAll(".link")
    .data(force.links())
    .enter().append("line")
    .attr("class", "link")
    .attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
Run Code Online (Sandbox Code Playgroud)

我注意到"refX"属性指定了箭头应该显示的行尾的距离.我怎样才能使它依赖于它所指向的节点的半径?如果我不能这样做,我可以改为改变行本身的端点吗?我猜我会在这个函数中做到这一点,当一切都移动时,它会重置行的端点:

function tick() {
        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; });

        circle.attr("transform", function(d) {
            return "translate(" + d.x …
Run Code Online (Sandbox Code Playgroud)

svg d3.js

17
推荐指数
1
解决办法
8724
查看次数

D3:在链接中使用节点属性而不是数组中的索引

我是D3.js的初学者,致力于网络可视化,我无法弄清楚如何正确指定力布局的链接.问题是默认情况下,d3将链接的"源"和"目标"解释为"节点"数组中节点的索引.但是,在我的数据中,源和目标引用节点的id号,我将其存储在节点属性中.如何获取指向的链接node.id而不是node.index?这是我想我应该这样做的地方:

var nodes = data.nodes;
var edges = data.edges;
var force = d3.layout.force()
            .nodes(d3.values(nodes))
            .links(edges)
            .size([w, h])
            .linkDistance(80)
            .charge(-500)
            .gravity(0.2)
            .on("tick", tick)
            .start();
Run Code Online (Sandbox Code Playgroud)

......但我不确定我是否应该修改.nodes()零件或.links()零件.我尝试在它之前添加它:

var nodes = data.nodes;
for (var i = 0; i < nodes.length; i++) {
    nodes[i].index = nodes[i].id;
    console.log(i + " " + nodes[i].index + " " + nodes[i].id);
}
Run Code Online (Sandbox Code Playgroud)

...但是index当我创建力时,属性才会被覆盖.

我读了这个问题,但唯一的答案似乎有点像黑客.他们还提到了"数据键",但我找不到那些,我不知道如何合并它们,因为我实际上并没有使用这个enter()功能.

d3.js force-layout

14
推荐指数
1
解决办法
7788
查看次数

按钮ActionListener未在扩展JPanel的类内部调用

我有一个名为FrontGUI的主框架,并添加了一个侧面板.这个侧面板是一个名为FrontGUILinker的类,它扩展了JPanel,并在其上有一个按钮.当我运行程序时,按钮不会执行任何操作 - 似乎似乎没有调用ActionListener.我有其他几个具有类似设置的组件,按钮都可以使用它们 - 唯一的区别是我们可以看到它们是JFrame的扩展,它们不是FrontGUI的直接字段,而是代替下面代码中提到的maingui .这个maingui包含每个帧的Controller类,包括FrontGUIController,但FrontGUILinkerController是FrontGUIController中的一个字段.以下是我班级的概述,希望只是遗漏了无关的事情.主要的JFrame类:

public class FrontGUI extends JFrame {
    public FrontGUILinker linkerPanel;
    public JButton btnShowhideLinker;

    public FrontGUI() {
      linkerPanel = new FrontGUILinker();
      contentPane.add(linkerPanel, BorderLayout.EAST);

      btnShowhideLinker = new JButton("Show/Hide Linker");
      contentPane.add(btnShowhideLinker);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是它的"控制器"类.侧面板可以显示或不显示,这是这个动作监听器所做的,这似乎工作得很好.

public class FrontGUIController {
    public MAINGUI maingui;
    private FrontGUI frame;
    public FrontGUILinkerController linkerController;

    public FrontGUIController(MAINGUI parent) {
       maingui = parent;
       frame = new FrontGUI();
       linkerController = new FrontGUILinkerController(maingui);

       //Button: Show/Hide linkerPanel
       frame.btnShowhideLinker.addActionListener( new ActionListener() {
       @Override
       public void actionPerformed(ActionEvent arg0) {
           frame.linkerPanel.setVisible(!frame.linkerPanel.isVisible());
       }});

    } …
Run Code Online (Sandbox Code Playgroud)

java macos user-interface swing actionlistener

5
推荐指数
1
解决办法
1720
查看次数

通过 SOAP 访问 ISI Web of Science

我正在尝试编写一个 Python 脚本,用于从 ISI Web of Science 中检索有关出版物的信息。我在 GitHub 上找到了 domoritz 的 python 脚本wos.py。它使用 Suds 连接到 ISI Web of Science Web 服务。我已经将它导入到我的 python 脚本中,并按照评论中的非常简短的说明尝试了这段代码:

from wos import *
soap = WokmwsSoapClient()
results = soap.search('Hallam')
Run Code Online (Sandbox Code Playgroud)

然后我收到一个错误:

suds.WebFault: Server raised fault: 'line 1:1: unexpected token: Hallam'
Run Code Online (Sandbox Code Playgroud)

我查看了 wos.py 中的代码。这是search函数:

def search(self, query):
    qparams = {
        'databaseID' : 'WOS',
        'userQuery' : query,
        'queryLanguage' : 'en',
        'editions' : [{
            'collection' : 'WOS',
            'edition' : 'SCI',
        },{
            'collection' : 'WOS',
            'edition' …
Run Code Online (Sandbox Code Playgroud)

python soap web-services suds

5
推荐指数
1
解决办法
4747
查看次数