Экспорт Gephi в GraphML без сохранения цвета узла

Я использую Gephi для создания графовой модели, а затем экспортирую ее в файл .graphml. Однако, когда я создаю файл .graphml, атрибут цвета не сохраняется.

Ниже показано, как я создаю графовую модель gephi из своего GraphClass (состоящего из ребер типа E и узлов типа V) и экспортирую ее в файл .graphml. В этом случае я создаю случайное K-дерево

    public void testCreateGraph() throws Exception {
        KTree K1 = new KTree(4);

        for (int i = 0; i < 95; i++) {
            K1.addRandomVertex();
        }
        GraphMLCreator<KVertex,KEdge<KVertex>> creator = new GraphMLCreator();
        creator.create(K1);
        creator.sendToDB();
    }

    public void create(GraphClass<V,E> G){

        graph = graphModel.getUndirectedGraph();
        this.addNodes(G.getVertices());
        this.addEdges(G.getEdges());

    }

    private void addEdges(Collection<E> edges){

        for (E e: edges){
            Node n0 = graph.getNode(e.getEndPoints().getFirst().getLabel());
            Node n1 = graph.getNode(e.getEndPoints().getSecond().getLabel());

            org.gephi.graph.api.Edge e1 = graphModel.factory().newEdge(n0, n1, 1f, false);
            graph.addEdge(e1);
        }

    }

    private void addNodes(Collection<V> nodes){

        for (V v:nodes){
            Node n0 = graphModel.factory().newNode(v.getLabel());
            n0.getNodeData().setLabel(v.getLabel());
            n0.getNodeData().setColor(255,0,0);

            graph.addNode(n0);
        }

    }

    public void createGraphML(){

        //Export full graph
        ExportController ec = Lookup.getDefault().lookup(ExportController.class);
        try {
            ec.exportFile(new File("io_gexf.gexf"));
        } catch (IOException ex) {
            ex.printStackTrace();
            return;
        }

        //Export only visible graph
        GraphExporter exporter = (GraphExporter) ec.getExporter("gexf");     //Get GEXF exporter
        exporter.setExportVisible(true);  //Only exports the visible (filtered) graph
        exporter.setWorkspace(workspace);
        try {
            ec.exportFile(new File("io_gexf.gexf"), exporter);
        } catch (IOException ex) {
            ex.printStackTrace();
            return;
        }

        //Export to Writer
        Exporter exporterGraphML = ec.getExporter("graphml");     //Get GraphML exporter
        exporterGraphML.setWorkspace(workspace);
        StringWriter stringWriter = new StringWriter();
        ec.exportWriter(stringWriter, (CharacterExporter) exporterGraphML);

        FileWriter fw = null;
        try {
            fw = new FileWriter("my-file.graphml");
            fw.write(stringWriter.toString());
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Я хочу установить для узлов красный цвет, но в yED они просто отображаются как по умолчанию желтыйвведите здесь описание изображения

Узел из GraphML выглядит следующим образом:

<node id="V0">
  <data key="label">V0</data>
  <data key="size">1.0</data>
  <data key="r">65025</data>
  <data key="g">0</data>
  <data key="b">0</data>
  <data key="x">418.6446</data>
  <data key="y">-191.08676</data>
</node>

Есть ли способ в Gephi напрямую изменить значение определенного тега данных? Я считаю, что моя проблема заключается в том, что формат тега данных graphml неверен и не распознается yED, и что этот неправильный формат может быть связан с тем, как написан файл.


person TCulos    schedule 06.01.2016    source источник


Ответы (1)


Для графической информации yed использует дополнительное пространство имен. Вы должны использовать это. Только для одного узла ваш файл GraphMl должен выглядеть следующим образом.

Как вы можете создать это с помощью gephi и java, я пока не знаю.

Но если вы можете каким-то образом создать все строки вокруг тега «узел», вам нужно всего лишь изменить ‹ node id="YourLabel" > и ‹ y:Fill color="#FF0000" >, чтобы получить узел с вашим цветом. Идентификатор узла будет изменен с помощью yed на «n0», когда вы сохраните файл с помощью yed. Таким образом, вы также должны явно указать реальную метку узла, которую вы найдете непосредственно перед "YourLabel ‹ y:LabelModel >" .

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:java="http://www.yworks.com/xml/yfiles-common/1.0/java" xmlns:sys="http://www.yworks.com/xml/yfiles-common/markup/primitives/2.0" xmlns:x="http://www.yworks.com/xml/yfiles-common/markup/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:yed="http://www.yworks.com/xml/yed/3" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
  <key attr.name="Beschreibung" attr.type="string" for="graph" id="d0"/>
  <key for="port" id="d1" yfiles.type="portgraphics"/>
  <key for="port" id="d2" yfiles.type="portgeometry"/>
  <key for="port" id="d3" yfiles.type="portuserdata"/>
  <key attr.name="url" attr.type="string" for="node" id="d4"/>
  <key attr.name="description" attr.type="string" for="node" id="d5"/>
  <key for="node" id="d6" yfiles.type="nodegraphics"/>
  <key for="graphml" id="d7" yfiles.type="resources"/>
  <key attr.name="url" attr.type="string" for="edge" id="d8"/>
  <key attr.name="description" attr.type="string" for="edge" id="d9"/>
  <key for="edge" id="d10" yfiles.type="edgegraphics"/>
  <graph edgedefault="directed" id="G">
    <data key="d0"/>
    <node id="YourLabel">
      <data key="d6">
        <y:ShapeNode>
          <y:Geometry height="30.0" width="30.0" x="415.0" y="203.0"/>
          <y:Fill color="#FF0000" transparent="false"/>
          <y:BorderStyle color="#000000" type="line" width="1.0"/>
          <y:NodeLabel alignment="center" autoSizePolicy="content" fontFamily="Dialog" fontSize="12" fontStyle="plain" hasBackgroundColor="false" hasLineColor="false" height="18.701171875" modelName="custom" textColor="#000000" visible="true" width="58.708984375" x="-14.3544921875" y="5.6494140625">YourLabel<y:LabelModel>
              <y:SmartNodeLabelModel distance="4.0"/>
            </y:LabelModel>
            <y:ModelParameter>
              <y:SmartNodeLabelModelParameter labelRatioX="0.0" labelRatioY="0.0" nodeRatioX="0.0" nodeRatioY="0.0" offsetX="0.0" offsetY="0.0" upX="0.0" upY="-1.0"/>
            </y:ModelParameter>
          </y:NodeLabel>
          <y:Shape type="rectangle"/>
        </y:ShapeNode>
      </data>
    </node>
  </graph>
  <data key="d7">
    <y:Resources/>
  </data>
</graphml>
person gequest    schedule 06.01.2016