suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Verwenden von Tags, um ein direktes Layout in VEGA zu erzwingen

Ich versuche, in VEGA ein Netzwerkdiagramm mit einem erzwungenen Layout zu erstellen, das Beschriftungen für jeden Knoten anzeigt. Ein möglicher Ansatz wird in dieser Frage erwähnt. Anhand des Vega-Editors können wir feststellen, dass die Beschriftungen vorhanden sind, es jedoch einige Überschneidungen und Probleme mit der visuellen Unordnung gibt.

Ich habe mich also gefragt, ob es möglich ist, etwas Ähnliches wie in diesem Beispiel zu erreichen, bei dem Beschriftungen angezeigt werden, wenn man mit der Maus über einen Knoten fährt, und im Diagramm hervorgehoben und fixiert bleiben.

Ich habe einige Änderungen im Feld „Text“ versucht, aber ich denke, es könnte komplizierter sein.

P粉882357979P粉882357979303 Tage vor431

Antworte allen(2)Ich werde antworten

  • P粉197639753

    P粉1976397532024-02-27 11:22:03

    使用此配置:

    {
      "$schema": "https://vega.github.io/schema/vega/v5.json",
      "description": "A node-link diagram with force-directed layout, depicting character co-occurrence in the novel Les Misérables.",
      "width": 700,
      "height": 500,
      "padding": 0,
      "autosize": "none",
    
      "signals": [
        { "name": "cx", "update": "width / 2" },
        { "name": "cy", "update": "height / 2" },
        { "name": "nodeRadius", "value": 8,
          "bind": {"input": "range", "min": 1, "max": 50, "step": 1} },
        { "name": "nodeCharge", "value": -30,
          "bind": {"input": "range", "min":-100, "max": 10, "step": 1} },
        { "name": "linkDistance", "value": 30,
          "bind": {"input": "range", "min": 5, "max": 100, "step": 1} },
        { "name": "static", "value": true,
          "bind": {"input": "checkbox"} },
        {
          "description": "State variable for active node fix status.",
          "name": "fix", "value": false,
          "on": [
            {
              "events": "symbol:mouseout[!event.buttons], window:mouseup",
              "update": "false"
            },
            {
              "events": "symbol:mouseover",
              "update": "fix || true"
            },
            {
              "events": "[symbol:mousedown, window:mouseup] > window:mousemove!",
              "update": "xy()",
              "force": true
            }
          ]
        },
        {
          "description": "Graph node most recently interacted with.",
          "name": "node", "value": null,
          "on": [
            {
              "events": "symbol:mouseover",
              "update": "fix === true ? item() : node"
            }
          ]
        },
        {
          "description": "Flag to restart Force simulation upon data changes.",
          "name": "restart", "value": false,
          "on": [
            {"events": {"signal": "fix"}, "update": "fix && fix.length"}
          ]
        }
      ],
    
      "data": [
        {
          "name": "node-data",
          "url": "data/miserables.json",
          "format": {"type": "json", "property": "nodes"}
        },
        {
          "name": "link-data",
          "url": "data/miserables.json",
          "format": {"type": "json", "property": "links"}
        }
      ],
    
      "scales": [
        {
          "name": "color",
          "type": "ordinal",
          "domain": {"data": "node-data", "field": "group"},
          "range": {"scheme": "category20c"}
        }
      ],
    
      "marks": [
        {
          "name": "nodes",
          "type": "symbol",
          "zindex": 1,
    
          "from": {"data": "node-data"},
          "on": [
            {
              "trigger": "fix",
              "modify": "node",
              "values": "fix === true ? {fx: node.x, fy: node.y} : {fx: fix[0], fy: fix[1]}"
            },
            {
              "trigger": "!fix",
              "modify": "node", "values": "{fx: null, fy: null}"
            }
          ],
    
          "encode": {
            "enter": {
              "fill": {"scale": "color", "field": "group"},
              "stroke": {"value": "white"}
            },
            "update": {
              "size": {"signal": "2 * nodeRadius * nodeRadius"},
              "cursor": {"value": "pointer"}
            }
          },
    
          "transform": [
            {
              "type": "force",
              "iterations": 300,
              "restart": {"signal": "restart"},
              "static": {"signal": "static"},
              "signal": "force",
              "forces": [
                {"force": "center", "x": {"signal": "cx"}, "y": {"signal": "cy"}},
                {"force": "collide", "radius": {"signal": "nodeRadius"}},
                {"force": "nbody", "strength": {"signal": "nodeCharge"}},
                {"force": "link", "links": "link-data", "distance": {"signal": "linkDistance"}}
              ]
            }
          ]
        },
        {
          "type": "text",
          "from": {"data": "nodes"},
          "zIndex": 2,
          "encode": {
            "enter": {
              "align": {"value": "center"},
              "baseline": {"value": "middle"},
              "fontSize": {"value": 15},
              "fontWeight": {"value": "bold"},
              "fill": {"value": "black"},
              "text": {"field": "datum.name"}
            },
            "update": {"dx": {"field": "x"}, "dy": {"field": "y"}}
          }
        },
        {
          "type": "path",
          "from": {"data": "link-data"},
          "interactive": false,
          "encode": {
            "update": {
              "stroke": {"value": "#ccc"},
              "strokeWidth": {"value": 0.5}
            }
          },
          "transform": [
            {
              "type": "linkpath",
              "require": {"signal": "force"},
              "shape": "line",
              "sourceX": "datum.source.x", "sourceY": "datum.source.y",
              "targetX": "datum.target.x", "targetY": "datum.target.y"
            }
          ]
        }
      ]
    }

    Antwort
    0
  • P粉818306280

    P粉8183062802024-02-27 00:19:46

    我不太清楚您的要求。我创建了这个力导向图表,并在此处添加了标签:

    https://vega.github.io/vega/examples/打包气泡图/

    这是我也使用动态标签创建的力导向布局。

    https://github.com/PBI-David/Deneb-Showcase

    这些有帮助吗?

    Antwort
    0
  • StornierenAntwort