From 45d47676ca3cc1c19b457f83a9482ba8b906f829 Mon Sep 17 00:00:00 2001
From:
Date: Tue, 14 Aug 2007 04:04:36 -0400
Subject: [PATCH 1/1] 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.
---
app/controllers/graph_controller.rb | 74 +++++++++++++++++++++++++----
app/views/quickvote/results.rhtml | 2 +-
2 files changed, 67 insertions(+), 9 deletions(-)
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 ) ) %>
--
2.39.5