The first requirement is to find a better Hue function, which I call myHue.
This should separate the colors on the color wheel, better than the default.  The function fcor is a “correction” function with period 1.

fcor[x_] :=a/( 6 Pi) Sin[6 Pi x]
keeps the 6 “primary and secondary” colors unchanged, and if the parameter a is between -1 and 1, then the x +  fcor[x_]  is monotonic.

n =24;  (*number of colors around the color wheel *)
a = .33;
fcor[x_] :=a/( 6 Pi) Sin[6 Pi x]  
Plot[fcor[x], {x, 0, 1},Ticks ->{{{0, "R"}, {1/6, "Y"}, {1/3, "G"},  {1/2, "C"},  {2/3, "B"},  {5/6, "M"}, {1, "R"}}, Automatic}, PlotLabel ->"y = fcor(x)"]
Plot[x +fcor[x], {x, 0, 1},Ticks ->{{0,1/6, 1/3, 1/2, 2/3, 5/6, 1}, Automatic}, PlotLabel ->"y = x + fcor(x)"]
myHue[x_] := Hue[x +fcor[x]];
Graphics@Table[{myHue[t/n],Disk[{0,0}, 1, 2 Pi/n{t-.5, t+.5}]}, {t, 0,n-1}]

vertices = {{-1,0},
{-3,0},
{-2, Sqrt[3]},
{-1, 2Sqrt[3]},
{0, 3Sqrt[3]},
{1, 2Sqrt[3]},
{2, Sqrt[3]},
{3,0},
{1,0}};

This is the colorLists that I think we should import into the MATLAB code.  It differs slightly from the cocalc output, since I color the partitions from 1 to n, whereas cocalc uses the colors 0 to n-1.

The first order of business with the MATLAB code is to import this list and write a function that projects a vector one any one of these subspaces.

It must have the following property, that does not allow lexicographic order:
If A is a subspace of B, then A comes before B in the list.

Each of the individual lists is in lexicographic order, which makes the two equivalent partitions, 2D1 and 2D2 look different.  I have at times defined a 2D2alt to make the colors agree with 2D1 and 2D2alt, but decided that it is a good exercise for the reader that 2D1 and 2D2 are equivalent.

Here my definition of equivalent is that the reduced systems are the same, (after a possible permutations of the colors).  Two equivalent partitions need not be in the same group orbit.  In this list, only one element of each group orbit is listed.  This list has the special property that each lower partition is a true refinement (not just that there is an element in the group orbit that is a  refinement).  I think we called this a “consistent choice” in nss3.

colorLists = {
{0,0,0,0,0,0,0,0,0},
{1,1,1,1,1,1,1,1,1},
{1,0,-1,1,0,-1,1,0,-1},
{0,1,-1,-1,0,1,1,-1,0},
{1,-1,0,0,0,0,0,-1,1},
{1,2,1,1,2,1,1,2,1},
{1,2,2,2,1,2,2,2,1},
{1,2,3,1,2,3,1,2,3},
{1,2,3,3,1,2,2,3,1},
{1,1,2,3,4,3,2,1,1} ,
{1,2,3,4,0,-4,-3,-2,-1},
{1,2,3,4,5,4,3,2,1},
{1,2,3,4,5,6,7,8,9}};
TableForm[colorLists]

colorListToDisk1[list_, i_] := Module[{maxColor = Max[list], minColor = Min[list], color = list[[i]] },
If[minColor == 1,Return[ {myHue[(color-1)/maxColor],Disk[vertices[[i]], r] }] ];
If[minColor + maxColor ≠ 0, Print["error"]; Return[Pink]];
If[color == 0, Return[{White,Disk[vertices[[i]], r] }]  ];
If[color < 0, Return[{myHue[(-color-1)/maxColor],Disk[vertices[[i]], r, {Pi/2, 3Pi/2}], White,Disk[vertices[[i]], r, {-Pi/2, Pi/2}] }] ];
If[color > 0, Return[{myHue[(color-1)/maxColor],Disk[vertices[[i]], r, {-Pi/2, Pi/2}], White, Disk[vertices[[i]], r, {Pi/2, 3Pi/2}]} ] ];
]

colorListToDisk2[list_, i_] := Module[{maxColor = Max[list], minColor = Min[list], color = list[[i]] },
If[minColor == 1,Return[ {myHue[(color-1)/maxColor],Disk[vertices[[i]], r] }] ];
If[minColor + maxColor ≠ 0, Print["error"]; Return[Pink]];
If[color == 0, Return[{GrayLevel[1],Disk[vertices[[i]], r] }]  ]; (* different versions grayLevel .8 or 1 *)
If[color < 0, Return[{myHue[(-color-1)/maxColor],Disk[vertices[[i]], r], White,Disk[vertices[[i]], 0.3r] }] ];
If[color > 0, Return[{myHue[(color-1)/maxColor],Disk[vertices[[i]], r], Black, Disk[vertices[[i]], 0.3 r]} ] ];
]

colorListsNames = {"0D", "1D1", "1D2", "1D3", "1D4", "2D1", "2D2", "3D1", "3D2", "4D1","4D2", "5D", "9D"};colorListsSubs = {"(0,0,0,0,0,0,0,0,0)", "(a,a,a,a,a,a,a,a,a)","(a,0,-a,a,0,-a,a,0,-a)", "(0,a,-a,-a,0,a,a,-a,0)","(a,-a,0,0,0,0,0,-a,a)","(a,b,a,a,b,a,a,b,a)","(a,b,b,b,a,b,b,b,a)","(a,b,c,a,b,c,a,b,c)","(a,b,c,c,a,b,b,c,a)","(a,a,b,c,d,c,b,a,a)","(a,b,c,d,0,-d,-c,-b,-a)","(a,b,c,d,e,d,c,b,a)","(a,b,c,d,e,f,g,h,i)"};

r = .85;
myHue[x_] := Hue[x +0.3/(6 Pi)Sin[6 Pi x]];
figures = {};
Do[
colorList = colorLists[[listIndex]];
graphicsList = Flatten@Join[{Thickness[.008],Line[{vertices[[2]], vertices[[5]], vertices[[8]], vertices[[2]]}], Line[{vertices[[1]], vertices[[3]]}], Line[{vertices[[4]], vertices[[6]]}], Line[{vertices[[7]], vertices[[9]]}]
 },Table[(* put version 1 or 2 here *){colorListToDisk2[colorList,i], Black, Circle[vertices[[i]], r]}, {i, 1, 9}]
];
AppendTo[figures, Graphics[graphicsList]], {listIndex, 1, Length[colorLists]}];
Transpose[{colorListsNames,colorListsSubs,figures}]

Saved with version 1 (colorListToDisk1).  This didn’t need the gray for x_i = 0, or black and white for positive and negative, but it proved to be too confusing

Saved with an old version 2 (colorListToDisk2). This has slightly smaller inner dots (with radius r/4 as opposed to .3r).  This also has the 2D2alt, which I decided to eliminate.  (It is a good exercise to see that 2D1 and 2D2 are equivalent.)  It also uses Gray for color = 0. I am uncertain as to using white or Gray for color = 0.

A saved version of my “final” version of the figures, without the names or subspaces: