From:
Date: Tue, 14 Aug 2007 08:04:36 +0000 (-0400)
Subject: Added the choices position and get_posititons_info to graph controller. Right now...
X-Git-Url: https://projects.mako.cc/source/selectricity-live/commitdiff_plain/45d47676ca3cc1c19b457f83a9482ba8b906f829?ds=sidebyside
Added the choices position and get_posititons_info to graph controller. Right now, since
the graph graphs a different set of data for each candidate, the data function has to be
called multiple times and I'm not sure how to do it/if it's possible within the class
definition. As such, I've defined everything within the choices_position method for now.
I'll be trying to figure out the kinks next. Overall, the graph is very confusing and
might not be very useful in the end, but the data it uses is.
---
diff --git a/app/controllers/graph_controller.rb b/app/controllers/graph_controller.rb
index 38025ef..17e1578 100644
--- a/app/controllers/graph_controller.rb
+++ b/app/controllers/graph_controller.rb
@@ -1,6 +1,6 @@
require 'date'
class GraphController < ApplicationController
-
+
class GruffGraff
def initialize(options)
@@ -63,11 +63,7 @@ class GraphController < ApplicationController
:y_axis_label => "Number of Votes")
send_data(*graph.output)
end
-
- def quickvote_bar
- @election = Election.find(params[:id])
- end
-
+
def borda_bar
@election = Election.find(params[:id])
pref_tally = make_preference_tally(@election)
@@ -85,7 +81,69 @@ class GraphController < ApplicationController
send_data(*graph.output)
end
+ def choices_positions
+ @election = Election.find(params[:id])
+ pref_tally = make_preference_tally(@election)
+
+ fulldata = get_positions_info(@election)
+ (0...@election.candidates.size).each do |i|
+ sbar.data("Candidate#{i+1}", fulldata[i])
+ end
+
+ sbar = Gruff::Bar.new
+ sbar.title = "Times Voted in Each Position"
+ #sbar.theme = { :background_colors => ['#73BF26', '#ffffff'] }
+ sbar.font = File.expand_path('/usr/X11R6/lib/X11/fonts/TTF/Vera.ttf',
+ RAILS_ROOT)
+
+ graph = GruffGraff.new( :graph_type => Gruff::Bar,
+ :data_name => @election.name,
+ :data => data,
+ :interval_labels => labels,
+ :title => "Times Candidate Was Voted Each Position",
+ :x_axis_label => "Rank",
+ :y_axis_label => "Number of Times")
+
+
+
+
+ sbar.x_axis_label = "Rank"
+ sbar.y_axis_label = "Number of Times Ranked"
+
+ sbar.minimum_value = 0.0
+ send_data(sbar.to_blob, :disposition => 'inline', :type => 'image/png')
+
+
+ #data, labels = get_positions_info(@election)
+
+ end
private
+
+ def get_positions_info(election)
+ buckets = Hash.new
+ buckets2= Hash.new
+ ranks = Hash.new
+
+ election.candidates.each do |candidate|
+ buckets[candidate.id] = []
+ buckets2[candidate.id] = []
+ end
+
+ election.votes.each do |vote|
+ vote.rankings.each do |ranking|
+ buckets[ranking.candidate_id] << ranking.rank
+ end
+ end
+
+ buckets.each_pair do |id, array|
+ (1..election.candidates.size).each do |i|
+ buckets2[id] << (array.find_all {|rank| rank == i}).size
+ end
+ end
+
+ return buckets2.values
+
+ end
# generate the data and labels for each graph
def get_votes_per_day_data(election)
@@ -149,7 +207,7 @@ class GraphController < ApplicationController
# Put votes into bucket according to the time interval to which they belong,
# referenced by their key
- # Will build a graph over time, as each successive interval wil lhave more
+ # Will build a graph over time, as each successive interval will have more
# vote objects
election.votes.each do |vote|
buckets.keys.sort.each do |inter|
@@ -175,7 +233,7 @@ class GraphController < ApplicationController
interval_type = "Hour of the Day on 24 hour scale"
else #more than 2 days means use dates for labels
labels_hash[0] = (Date.parse(starttime.to_s)).to_s
- labels_hash[(numcols/2)-1] = (Date.parse(starttime + (timedelta/2))).to_s
+ labels_hash[(numcols/2)-1] = (Date.parse((starttime + (timedelta/2)).to_s)).to_s
labels_hash[numcols-1] = (Date.today).to_s
interval_type = "The Date"
end
diff --git a/app/views/quickvote/results.rhtml b/app/views/quickvote/results.rhtml
index 5fdfc3c..33bb038 100644
--- a/app/views/quickvote/results.rhtml
+++ b/app/views/quickvote/results.rhtml
@@ -165,5 +165,5 @@ by several other names.
<%= image_tag( graph_url( :action => 'votes_per_day', :id => @election ) ) %>
<%= image_tag( graph_url( :action => 'votes_per_interval', :id => @election ))%>
<%= image_tag( graph_url( :action => 'borda_bar', :id => @election ) ) %>
-
+<%= image_tag( graph_url( :action => 'choices_positions', :id => @election ) ) %>