Navigation Menu

Skip to content

Commit

Permalink
added visuals for circle mode of follower network
Browse files Browse the repository at this point in the history
  • Loading branch information
julidoehler committed Feb 6, 2012
1 parent 3cbdd08 commit 90244d7
Show file tree
Hide file tree
Showing 6 changed files with 388 additions and 69 deletions.
9 changes: 7 additions & 2 deletions lib/githubviz.rb
Expand Up @@ -66,7 +66,7 @@ def process_data

if @user

@api = GitHubV3API.new('')
@api = GitHubV3API.new('c1616feca6aa3e63655dd92766a475c2227ed6a0')

@data[@user] = @api.get("/users/#{@user}")
@data[@user]['level'] = 0
Expand All @@ -80,7 +80,7 @@ def process_data

get '/repo_viz' do
@user = params[:user]
@api = GitHubV3API.new('')
@api = GitHubV3API.new('c1616feca6aa3e63655dd92766a475c2227ed6a0')
user_data = @api.users.get(@user)
my_repos = @api.repos.list
page = 1
Expand Down Expand Up @@ -175,7 +175,12 @@ def process_data
end

get '/circle_viz' do
@api = GitHubV3API.new('c1616feca6aa3e63655dd92766a475c2227ed6a0')
@user = params[:user]
user_data = @api.users.get(@user)
#@data[@user] = @api.get("/users/#{@user}")
#@data[@user]['follower_count'] = @data[@user]['followers']
#@data[@user]['followers'] = @api.get("/users/#{@user}/followers")
erb :circle
end

Expand Down
125 changes: 62 additions & 63 deletions lib/public/d3.layout.js
Expand Up @@ -69,48 +69,44 @@ d3.layout.chord = function() {

function relayout() {
var subgroups = {},
groupSums = [],
groupIndex = d3.range(n),
subgroupIndex = [],
sum_cell = [],
k,
x,
x0,
i,
j;

a = 0;
b = 0;
c = 0;
chords = [];
groups = [];

// Compute the sum.
k = 0, i = -1; while (++i < n) {
x = 0, j = -1; while (++j < n) {
x += matrix[i][j];
x += matrix[i][j];// Summe der Zellinhalte
}
groupSums.push(x);
subgroupIndex.push(d3.range(n));
k += x;
}

// Sort groups…
if (sortGroups) {
groupIndex.sort(function(a, b) {
return sortGroups(groupSums[a], groupSums[b]);
});
sum_cell.push({index: i, value: x});//Zum Zählen der "Null-Nodes"
k += x; //Addition und Zuweisung der Summe ausgehender Verlinkungen
}

// Sort subgroups…
if (sortSubgroups) {
subgroupIndex.forEach(function(d, i) {
d.sort(function(a, b) {
return sortSubgroups(matrix[i][a], matrix[i][b]);
});
});

a = 0; while (++a < sum_cell.length){
if (sum_cell[a].value == 0){
b += 1;
}else{
c += 1;
}
}

//k += b;
//alert("Länge: " + sum_cell.length + ", b:" + b + ", k: " + k);
// Convert the sum to scaling factor for [0, 2pi].
// TODO Allow start and end angle to be specified.
// TODO Allow padding to be specified as percentage?
k = (2 * Math.PI - padding * n) / k;
k = (2 * Math.PI - padding * n - 0.025 * b) / k;


// Compute the start and end angle for each group and subgroup.
// Note: Opera has a bug reordering object literal properties!
Expand All @@ -119,48 +115,71 @@ d3.layout.chord = function() {
var di = groupIndex[i],
dj = subgroupIndex[di][j],
v = matrix[di][dj],
a0 = x,
a1 = x += v * k;

a0 = x += (v * k)/3,
a1 = x += (v * k)/3;//Neuzuweisung x (Startposition)
//if (v==0){a0 = a1 = x += 0.025/2}
subgroups[di + "-" + dj] = {
index: di,
index: di, //jeder Index 23Mal vorhanden --> min = 0, max = 22
subindex: dj,
startAngle: a0,
endAngle: a1,
value: v
value: v //binäre Werte für ausgehende Verbindungen aus der quadratischen Beziehungs-Matrix --> je Index 23 Werte --> gesamt 23²
};
x += (v * k)/3 //Padding für Graphen des Nodes
//alert("subgroups: " + subgroups[di + "-" + dj].index + ", start: " + subgroups[di + "-" + dj].startAngle + ", end: " + subgroups[di + "-" + dj].endAngle + ", value: " + subgroups[di + "-" + dj].value);
}
if (x0 == x){
x += 0.025 //zeige auch die Nodes, die keine ausgehenden Verbindungen haben
}
groups.push({
index: di,
groups.push({ // Groups bildet RückgabeArray an View
index: di, //Node
startAngle: x0,
endAngle: x,
value: (x - x0) / k
value: (x - x0) / k //Anzahl ausgehender Verbindungen je Node
});
x += padding;
//alert("groups: " + groups[di].index + ", value: " + groups[di].value + ", start: " + groups[di].startAngle + ", end: " + groups[di].endAngle);

}

// Generate chords for each (non-empty) subgroup-subgroup link.
i = -1; while (++i < n) {
j = i - 1; while (++j < n) {
var source = subgroups[i + "-" + j],
target = subgroups[j + "-" + i];
if (source.value || target.value) {
chords.push(source.value < target.value
? {source: target, target: source}
: {source: source, target: target});
if (source.value || target.value){
if (source.value < target.value) {
var group = groups[source.index];
if (group.startAngle == source.startAngle){
source.startAngle += (group.endAngle - group.startAngle)/2;
source.endAngle += (group.endAngle - group.startAngle)/2;}
else if (group.endAngle == source.endAngle){
source.startAngle -= (group.endAngle - group.startAngle)/2;
source.endAngle -= (group.endAngle - group.startAngle)/2;}
chords.push({source: target, target: source});}
//groups.push({source: target, target: source});}

else {
var group = groups[target.index];
if (group.startAngle == target.startAngle){
target.startAngle += (group.endAngle - group.startAngle)/2;
target.endAngle += (group.endAngle - group.startAngle)/2;}
else if (group.endAngle == target.endAngle){
target.startAngle -= (group.endAngle - group.startAngle)/2;
target.endAngle -= (group.endAngle - group.startAngle)/2;
}
chords.push({source: source, target: target});}
//groups.push({source: target, target: source});}


//alert("Index: " + chords[i].target.index + "TargetSTART: " + chords[i].target.startAngle + "TargetEND: " + chords[i].target.endAngle + "Value: " + chords[i].target.value);

}
}
}

if (sortChords) resort();
}

function resort() {
chords.sort(function(a, b) {
return sortChords(
(a.source.value + a.target.value) / 2,
(b.source.value + b.target.value) / 2);
});
}


chord.matrix = function(x) {
if (!arguments.length) return matrix;
Expand All @@ -176,26 +195,6 @@ d3.layout.chord = function() {
return chord;
};

chord.sortGroups = function(x) {
if (!arguments.length) return sortGroups;
sortGroups = x;
chords = groups = null;
return chord;
};

chord.sortSubgroups = function(x) {
if (!arguments.length) return sortSubgroups;
sortSubgroups = x;
chords = null;
return chord;
};

chord.sortChords = function(x) {
if (!arguments.length) return sortChords;
sortChords = x;
if (chords) resort();
return chord;
};

chord.chords = function() {
if (!chords) relayout();
Expand Down
29 changes: 29 additions & 0 deletions lib/public/flare-imports.json
@@ -0,0 +1,29 @@
[
{"name":"flare.analytics.cluster","size":3938,"imports":["flare.animate"]},
{"name":"flare.analytics.graph","size":3534,"imports":["flare.animate","flare.vis.data","flare.util","flare.vis.operator"]},
{"name":"flare.animate","size":17010,"imports":[]},
{"name":"flare.data.converters","size":721,"imports":[]},
{"name":"flare.data.DataField","size":1759,"imports":["flare.data.DataUtil"]},
{"name":"flare.data.DataSchema","size":2165,"imports":["flare.data.DataField","flare.util"]},
{"name":"flare.data.DataSet","size":586,"imports":["flare.data.DataTable"]},
{"name":"flare.data.DataSource","size":3331,"imports":["flare.data.converters","flare.data.DataSchema"]},
{"name":"flare.data.DataTable","size":772,"imports":["flare.data.DataSchema"]},
{"name":"flare.data.DataUtil","size":3322,"imports":["flare.data.DataField","flare.data.DataSchema"]},
{"name":"flare.display","size":8833,"imports":[]},
{"name":"flare.flex","size":4116,"imports":["flare.display","flare.data.DataSet"]},
{"name":"flare.physics","size":1082,"imports":[]},
{"name":"flare.query","size":1616,"imports":[]},
{"name":"flare.scale","size":2105,"imports":[]},
{"name":"flare.util","size":8258,"imports":[]},
{"name":"flare.vis.axis","size":1302,"imports":["flare.animate","flare.vis.Visualization"]},
{"name":"flare.vis.controls","size":2138,"imports":["flare.vis.Visualization","flare.vis.operator"]},
{"name":"flare.vis.data","size":20544,"imports":["flare.util","flare.vis.events","flare.data.DataSet","flare.data.DataSchema","flare.data.DataField"]},
{"name":"flare.vis.events","size":2313,"imports":["flare.vis.data"]},
{"name":"flare.vis.legend","size":4614,"imports":["flare.util","flare.display"]},
{"name":"flare.vis.operator","size":4461,"imports":[]},
{"name":"flare.vis.pix","size":4461,"imports":[]},
{"name":"flare.vis.pic","size":4461,"imports":[]},
{"name":"flare.vis.piz","size":4461,"imports":[]},
{"name":"flare.vis.pit","size":4461,"imports":[]},
{"name":"flare.vis.Visualization","size":16540,"imports":["flare.animate","flare.vis.operator","flare.vis.events","flare.vis.data","flare.vis.axis","flare.util","flare.vis.controls"]}
]

0 comments on commit 90244d7

Please sign in to comment.