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.
