Code example about customized FreeGraph conversion to DGML.
using imbSCI.Graph.FreeGraph; using imbSCI.Graph.DGML; using imbSCI.Graph.DGML.core;
imbSCI.Graph library is available via NuGet.
/// <summary> /// Generates simple-styled graph /// </summary> /// <param name="addLegend">if set to <c>true</c> [add legend].</param> /// <returns></returns> public DirectedGraph GetSimpleGraph(Boolean addLegend=true) { DirectedGraph output = new DirectedGraph(); output.Title = name; output.Layout = imbSCI.Graph.DGML.enums.GraphLayoutEnum.Sugiyama; output.NeighborhoodDistance = 20; var res = output.Categories.AddOrGetCategory(0, "Reserve Term", ""); var sec = output.Categories.AddOrGetCategory(1, "Secondary Term", ""); var prim = output.Categories.AddOrGetCategory(2, "Primary Term", ""); res.Stroke = Color.LightGray.toHexColor(); res.StrokeThinkness = 2; res.Background = Color.WhiteSmoke.toHexColor(); res.StrokeDashArray = "5,2,5,2"; sec.Stroke = Color.Gray.toHexColor(); sec.StrokeThinkness = 4; sec.Background = Color.WhiteSmoke.toHexColor(); prim.Stroke = Color.Black.toHexColor(); prim.StrokeThinkness = 6; prim.Background = Color.WhiteSmoke.toHexColor(); foreach (freeGraphNodeBase node in nodes) { Node nd = output.Nodes.AddNode(node.name, node.name + " " + node.weight.ToString("F4")); nd.Category = node.type.ToString(); } foreach (freeGraphLinkBase link in links) { Link l = new Link(link.nodeNameA, link.nodeNameB); freeGraphNodeBase tn = GetNode(link.nodeNameB); output.Links.Add(l); } if (addLegend) { var legendNode = output.Nodes.AddNode("TermCategory", "LEGEND"); var resNode = output.Nodes.AddNode("TCRES", "Reserve Term"); resNode.Category = res.Id; var secNode = output.Nodes.AddNode("TCSEC", "Secondary Term"); secNode.Category = sec.Id; var primNode = output.Nodes.AddNode("TCPRIM", "Primary Term"); primNode.Category = prim.Id; output.Links.AddLink(legendNode, resNode, "Term Category"); output.Links.AddLink(legendNode, secNode, "Term Category"); output.Links.AddLink(legendNode, primNode, "Term Category"); } return output; }
Now, application of the method:
var dgml = cloud.GetSimpleGraph(true); dgml.Save(matrixReport.pathFor("cloud_initial_" + classSet.name, imbSCI.Data.enums.getWritableFileMode.none, "Initial version of full-sample set, diagnostic Semantic Cloud for category [" + classSet.name + "]"));
Where the matrixReport is folderNode instance (imbSCI.Core). The example is taken from actual code of imbWBIWeb Business Intelligence libraries of imbVeles Framework..Core reporting procedure.
folderNode classReportFolder = experimentContext.folder.Add("General", "General and diagnostic reports", "The folder contains general (outside k-folds) reports on analysied industries (categories), web sites and other diagnostic data"); folderNode matrixReport = classReportFolder.Add("clouds", "More reports on semantic cloud", "Directory contains exported DirectedGraphs, varous matrix derivates, combined cloud and other diagnostic things");
Render below, is made with Visual Studio 2017.