# Data Visualization Contest

I wanted to look at the underlying space of two factors that went into the overall score for the contest, and see how they related to the length of the entry. The main factors are the result, complexity and the CPU time. I chose result, cpu_time and the nodeCount for my visualization. This is perfect for a 3-D scatter.

Here is the result of my visualization, animated to get the full 3-D effect. ```load('contest_data.mat')
```

Create the variables I might want to use.

```ts = [d.timestamp];
sc = [d.score];
re = [d.result];
nc = [d.nodeCount];
cpu = [d.cpu_time];

minScore = min(sc);
normScore = sc-minScore+1;

minResult = min(re);
normResult = re-min(re)+1;
```

Plot result, cpu_time, nodeCount

```figure('Color',[1 1 1]) %('Renderer','OpenGL')
plot3(normResult, cpu, nc, '.')
set(gca,'XScale','log')
xlabel('Normalized Result')
ylabel('CPU Time')
zlabel('Node Count')
set(gca,'Xlim',[1 100000])
set(gca,'Color','none')
drawnow
``` ```best = d(1).score;
bestIndexList = 1;
for n = 1:length(d),
if d(n).score < best,
best = d(n).score;
bestIndexList = [bestIndexList n];
end
end
```

Now plot them in red on top of the previous plot

```hold on
plot3(normResult(bestIndexList), cpu(bestIndexList),nc(bestIndexList),...
'r.-','LineWidth',2)
drawnow
%hold off
``` Compute the surface of this space

```sInd = find(isfinite(normResult)); %remove NaNs and Infs
pointSpace = [normResult(sInd)',cpu(sInd)', nc(sInd)'];
k = convhulln(pointSpace);

outerPoints = unique(k(:));
plot3(pointSpace(outerPoints,1),pointSpace(outerPoints,2),pointSpace(outerPoints,3),...
'ok','MarkerSize',6)
drawnow
``` I tried to add a surface of the convex hull, but this didn't really add to the plot. Here is the code in case you want to try.

```% hs = trisurf(k,normResult(sInd)',cpu(sInd)', nc(sInd)',...
%     'FaceColor',[0 .9 .3],...
```

Credit goes to Bob Bemis for providing the snippet of code I needed to get this animated GIF to work.

[http://www.mathworks.com/matlabcentral/fileexchange/21944 Animated GIF]

```set(gca,'DataAspectRatioMode','manual', 'clipping','off')
axis vis3d
drawnow
% turn off the axes and labels
axis off
f = getframe(gcf);
[im,map] = rgb2ind(f.cdata,256,'nodither');
im(1,1,1,36) = 0;

for i=1:36
camorbit(10,0,'data',[0 0 1])
drawnow
f = getframe(gcf);
im(:,:,1,i) = rgb2ind(f.cdata,map,'nodither');
end
``` Write the GIF file.

```fname = 'datavisSP.gif';
imwrite(im,map,fname,'DelayTime',0,'LoopCount',inf)
if exist('html','dir')
copyfile(fname,['html/' fname])
end
```