Maison  >  Questions et réponses  >  le corps du texte

Utiliser des balises pour forcer la mise en page directe dans VEGA

J'essaie de créer un diagramme de réseau dans VEGA en utilisant une disposition dirigée par force qui affiche les étiquettes pour chaque nœud. Une approche possible est mentionnée dans cette question. En se référant à l'éditeur Vega, on peut observer que les labels sont présents, mais il y a quelques problèmes de chevauchement et d'encombrement visuel.

Je me demandais donc s'il était possible de réaliser quelque chose de similaire à cet exemple, où les étiquettes apparaissent lors du survol d'un nœud et restent en surbrillance et fixes dans le diagramme.

J'ai essayé quelques modifications dans le champ "Texte", mais je suppose que cela pourrait être plus compliqué que ça.

P粉882357979P粉882357979235 Il y a quelques jours360

répondre à tous(2)je répondrai

  • P粉197639753

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

    Utilisez cette configuration :

    {
      "$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"
            }
          ]
        }
      ]
    }

    répondre
    0
  • P粉818306280

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

    Je ne suis pas sûr de ce que vous demandez. J'ai créé ce diagramme dirigé par la force et ajouté l'étiquette ici :

    https://vega.github.io/vega/examples/packaged bubble chart/

    Il s'agit d'une mise en page dirigée par la force que j'ai également créée à l'aide de balises dynamiques.

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

    Est-ce que cela a aidé ?

    répondre
    0
  • Annulerrépondre