Java 将Gephi导出到GraphML而不保持节点颜色

Java 将Gephi导出到GraphML而不保持节点颜色,java,filewriter,gephi,graphml,Java,Filewriter,Gephi,Graphml,我正在使用创建graphmodel,然后将其导出到.graphml文件中。但是,当我创建.graphml文件时,颜色属性并没有得到维护 以下是如何从GraphClass(由E类型的边和V类型的节点组成)创建gephi graphmodel并将其导出到.graphml文件。在本例中,我创建了一个随机K-树 public void testCreateGraph() throws Exception { KTree K1 = new KTree(4); fo

我正在使用创建graphmodel,然后将其导出到.graphml文件中。但是,当我创建.graphml文件时,颜色属性并没有得到维护

以下是如何从GraphClass(由E类型的边和V类型的节点组成)创建gephi graphmodel并将其导出到.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 testCreateGraph()引发异常{
KTree K1=新的KTree(4);
对于(int i=0;i<95;i++){
K1.addRandomVertex();
}
GraphMLCreator=新建GraphMLCreator();
creator.create(K1);
creator.sendToDB();
}

public void创建(GraphClass G){
graph=graphModel.getUndirectedGraph();
this.addNodes(G.getVertices());
此.addEdges(G.getEdges());
}
专用无效添加(集合边){
用于(E:边){
Node n0=graph.getNode(如getEndPoints().getFirst().getLabel());
节点n1=graph.getNode(例如getEndPoints().getSecond().getLabel());
org.gephi.graph.api.Edge e1=graphModel.factory().newEdge(n0、n1、1f、false);
图.附录(e1);
}
}
私有void addNodes(集合节点){
用于(V:节点){
Node n0=graphModel.factory().newNode(v.getLabel());
n0.getNodeData().setLabel(v.getLabel());
n0.getNodeData().setColor(255,0,0);
图.addNode(n0);
}
}
public void createGraphML(){
//导出完整图形
ExportController ec=Lookup.getDefault().Lookup(ExportController.class);
试一试{
exportFile(新文件(“io_gexf.gexf”);
}捕获(IOEX异常){
例如printStackTrace();
返回;
}
//仅导出可见图形
GraphExporter exporter=(GraphExporter)ec.getExporter(“gexf”);//获取gexf exporter
exporter.setExportVisible(true);//仅导出可见(过滤)图形
exporter.setWorkspace(工作空间);
试一试{
导出文件(新文件(“io_gexf.gexf”),导出器);
}捕获(IOEX异常){
例如printStackTrace();
返回;
}
//导出到编写器
Exporter exporterGraphML=ec.getExporter(“graphml”);//获取graphml Exporter
exporterGraphML.setWorkspace(工作空间);
StringWriter StringWriter=新StringWriter();
ec.exportWriter(stringWriter,(CharacterExporter)exporterGraphML);
FileWriter fw=null;
试一试{
fw=newfilewriter(“my file.graphml”);
fw.write(stringWriter.toString());
fw.close();
}捕获(IOE异常){
e、 printStackTrace();
}
}
我想将节点的颜色设置为红色,但它只是将它们显示为默认的黄色

图中的节点如下所示:

<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>

V0
1
65025
0
0
418.6446
-191.08676

Gephi中是否有某种方法可以直接更改特定数据标记的值?我认为我的问题是graphml数据标记的格式不正确,并且yED无法识别,这种不正确的格式可能与文件的写入方式有关

对于图形信息,yed使用了一个额外的名称空间。你必须使用它。 对于一个节点,GraphMl文件应该如下所示

用gephi和java创建这个的方法我现在还不知道

但是,如果您可以在“node”标记周围创建所有线条,那么您只需更改即可获得具有您的颜色的节点。 使用yed保存文件时,yed将节点id更改为“n0”。因此,您还应该显式地设置真正的节点标签,您将在“YourLabel之前找到它


你的标签
<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>
<?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>