File:SwedishGeneralElection2010-map.svg
Size of this PNG preview of this SVG file: 266 × 600 pixels. Other resolutions: 106 × 240 pixels | 213 × 480 pixels | 340 × 768 pixels | 454 × 1,024 pixels | 908 × 2,048 pixels | 290 × 654 pixels.
Original file (SVG file, nominally 290 × 654 pixels, file size: 262 KB)
File information
Structured data
Captions
DescriptionSwedishGeneralElection2010-map.svg |
English: Swedish general election 2010 relative coalition support breakdown by municipality. Although the Red-Greens are dominant on a wider area, the urban population of South decided the election for the Alliance. The data has been fed through a Laplace distribution function to make the regional differences seem more pronounced. Support is relative to all votes cast to one of the seven coalition parties. Open the image in browser for overall statistics. Key: 00 The Alliance dominance 00 Red-Green dominance 00 Equal dominance
|
Date | |
Source | Own work based on: SWE-Map Kommuner2007.svg by Lokal_Profil |
Author | Hydrox |
Permission (Reusing this file) |
This file is licensed under the Creative Commons Attribution-Share Alike 2.5 Generic license.
|
Other versions | File:SwedishGeneralElection2010-map-SwedenDemocrats.svg – Breakdown of relative support to Sweden Democrats, the only elected non-coalition party. |
SVG development InfoField |
Source code
editSweMap.rb
require "SweMapDB.rb"
# How to use this script in Ubuntu:
# 1) sudo aptitude install ruby1.8 libnokogiri-ruby
# 2) Place SweMapDB.rb and the source map in the same directory as this script.
# 3) Download regional ballots from the Election Authority:
# for i in `seq 1 9`; do
# wget -O $i.html "http://www.val.se/val/val2010/slutresultat/R/rvalkrets/0$i/index.html"
# done
# for i in `seq 10 29`; do
# wget -O $i.html "http://www.val.se/val/val2010/slutresultat/R/rvalkrets/$i/index.html"
# done
# 4) ruby1.8 SweMap.rb
# Set source map
MAP = SweMap.load "SWE-Map_Kommuner2007.svg"
# Laplace function parameters
MU = 0.5
B = 0.15
def lcdf(x)
return 0.5 * Math.exp((x-MU) / B) if x < MU
return 1 - 0.5 * Math.exp((-x+MU)/B)
end
def color(kommun, right, left, total)
r = 0xff * lcdf((left.to_f / total))
b = 0xff * lcdf((right.to_f / total))
MAP.style kommun, "fill", "rgb(#{r.round}, 0, #{b.round})"
end
kommunf = Hash.new { |hash, key| key }
kommunf['Malung-Sälen'] = 'Malung'
kommunf['I vallokal ej räknade röster'] = false
parties = %w(M, C, FP, KD, S, V, MP, SD, ÖVR, BLANK, OG)
(1..29).each do |v|
fn = "#{v}.html"
doc = Nokogiri::HTML(open(fn))
doc.errors.each { |e| raise "Parse error in #{fn}" if e.fatal? }
if [1,9,11,16].include? v
table = doc.css('table [class="sorteringsbar_tabell"]')[1].css "tbody:last-child"
summa = true
else
table = doc.css('table >tbody[class="sorteringsbara_rader"]')[1]
summa = false
end
raise "No table!" if not table
table.children.each do |row|
if row.elem?
if summa
kommun = kommunf[row.at_css('td:first-child').inner_text]
if v >= 10
link = "http://www.val.se/val/val2010/slutresultat/R/rvalkrets/#{v}/index.html"
else
link = "http://www.val.se/val/val2010/slutresultat/R/rvalkrets/0#{v}/index.html"
end
else
a = row.at_css('td:first-child a')
kommun = kommunf[]["title"]
link = "http://www.val.se/val/val2010/slutresultat/R/rvalkrets/#{v}/" + a["href"]
end
if kommun
right = left = sd = ovr = blank = og = total = 0
row.css("td.relativ_nej").each_with_index do |e,i|
n = e.inner_text.to_i
if i <= 3
right += n
elsif i <= 6
left += n
elsif i == 7
sd = n
elsif i == 8
ovr = n
elsif i == 9
blank = n
elsif i == 10
og = n
elsif i == 11
total = n
end
end
color kommun, right, left, total-blank-og-sd-ovr
MAP.link kommun, link, "#{kommun} / "+
"AL: #{(1000.0 * right/(total-blank-og)).round / 10.0}% " +
"RG: #{(1000.0 * left/(total-blank-og)).round / 10.0}%"
end
end
end
end
MAP.write("SwedishGeneralElection2010-map.svg")
SweMapDB.rb
begin
require "rubygems"
rescue LoadError
end
require "nokogiri"
SCB = {
"AB" => {
"0114" => "Upplands Väsby",
"0115" => "Vallentuna",
"0117" => "Österåker",
"0120" => "Värmdö",
"0123" => "Järfälla",
"0125" => "Ekerö",
"0126" => "Huddinge",
"0127" => "Botkyrka",
"0128" => "Salem",
"0136" => "Haninge",
"0138" => "Tyresö",
"0139" => "Upplands-Bro",
"0140" => "Nykvarn",
"0160" => "Täby",
"0162" => "Danderyd",
"0163" => "Sollentuna",
"0180" => "Stockholm",
"0181" => "Södertälje",
"0182" => "Nacka",
"0183" => "Sundbyberg",
"0184" => "Solna",
"0186" => "Lidingö",
"0187" => "Vaxholm",
"0188" => "Norrtälje",
"0191" => "Sigtuna",
"0192" => "Nynäshamn"
},
"C" => {
"0305" => "Håbo",
"0319" => "Älvkarleby",
"0330" => "Knivsta",
"0331" => "Heby",
"0360" => "Tierp",
"0380" => "Uppsala",
"0381" => "Enköping",
"0382" => "Östhammar"
},
"D" => {
"0428" => "Vingåker",
"0461" => "Gnesta",
"0480" => "Nyköping",
"0481" => "Oxelösund",
"0482" => "Flen",
"0483" => "Katrineholm",
"0484" => "Eskilstuna",
"0486" => "Strängnäs",
"0488" => "Trosa"
},
"E" => {
"0509" => "Ödeshög",
"0512" => "Ydre",
"0513" => "Kinda",
"0560" => "Boxholm",
"0561" => "Åtvidaberg",
"0562" => "Finspång",
"0563" => "Valdemarsvik",
"0580" => "Linköping",
"0581" => "Norrköping",
"0582" => "Söderköping",
"0583" => "Motala",
"0584" => "Vadstena",
"0586" => "Mjölby"
},
"F" => {
"0604" => "Aneby",
"0617" => "Gnosjö",
"0642" => "Mullsjö",
"0643" => "Habo",
"0662" => "Gislaved",
"0665" => "Vaggeryd",
"0680" => "Jönköping",
"0682" => "Nässjö",
"0683" => "Värnamo",
"0684" => "Sävsjö",
"0685" => "Vetlanda",
"0686" => "Eksjö",
"0687" => "Tranås"
},
"G" => {
"0760" => "Uppvidinge",
"0761" => "Lessebo",
"0763" => "Tingsryd",
"0764" => "Alvesta",
"0765" => "Älmhult",
"0767" => "Markaryd",
"0780" => "Växjö",
"0781" => "Ljungby"
},
"H" => {
"0821" => "Högsby",
"0834" => "Torsås",
"0840" => "Mörbylånga",
"0860" => "Hultsfred",
"0861" => "Mönsterås",
"0862" => "Emmaboda",
"0880" => "Kalmar",
"0881" => "Nybro",
"0882" => "Oskarshamn",
"0883" => "Västervik",
"0884" => "Vimmerby",
"0885" => "Borgholm"
},
"I" => {
"0980" => "Gotland"
},
"K" => {
"1060" => "Olofström",
"1080" => "Karlskrona",
"1081" => "Ronneby",
"1082" => "Karlshamn",
"1083" => "Sölvesborg"
},
"M" => {
"1214" => "Svalöv",
"1230" => "Staffanstorp",
"1231" => "Burlöv",
"1233" => "Vellinge",
"1256" => "Östra Göinge",
"1257" => "Örkelljunga",
"1260" => "Bjuv",
"1261" => "Kävlinge",
"1262" => "Lomma",
"1263" => "Svedala",
"1264" => "Skurup",
"1265" => "Sjöbo",
"1266" => "Hörby",
"1267" => "Höör",
"1270" => "Tomelilla",
"1272" => "Bromölla",
"1273" => "Osby",
"1275" => "Perstorp",
"1276" => "Klippan",
"1277" => "Åstorp",
"1278" => "Båstad",
"1280" => "Malmö",
"1281" => "Lund",
"1282" => "Landskrona",
"1283" => "Helsingborg",
"1284" => "Höganäs",
"1285" => "Eslöv",
"1286" => "Ystad",
"1287" => "Trelleborg",
"1290" => "Kristianstad",
"1291" => "Simrishamn",
"1292" => "Ängelholm",
"1293" => "Hässleholm"
},
"N" => {
"1315" => "Hylte",
"1380" => "Halmstad",
"1381" => "Laholm",
"1382" => "Falkenberg",
"1383" => "Varberg",
"1384" => "Kungsbacka"
},
"O" => {
"1401" => "Härryda",
"1402" => "Partille",
"1407" => "Öckerö",
"1415" => "Stenungsund",
"1419" => "Tjörn",
"1421" => "Orust",
"1427" => "Sotenäs",
"1430" => "Munkedal",
"1435" => "Tanum",
"1438" => "Dals-Ed",
"1439" => "Färgelanda",
"1440" => "Ale",
"1441" => "Lerum",
"1442" => "Vårgårda",
"1443" => "Bollebygd",
"1444" => "Grästorp",
"1445" => "Essunga",
"1446" => "Karlsborg",
"1447" => "Gullspång",
"1452" => "Tranemo",
"1460" => "Bengtsfors",
"1461" => "Mellerud",
"1462" => "Lilla Edet",
"1463" => "Mark",
"1465" => "Svenljunga",
"1466" => "Herrljunga",
"1470" => "Vara",
"1471" => "Götene",
"1472" => "Tibro",
"1473" => "Töreboda",
"1480" => "Göteborg",
"1481" => "Mölndal",
"1482" => "Kungälv",
"1484" => "Lysekil",
"1485" => "Uddevalla",
"1486" => "Strömstad",
"1487" => "Vänersborg",
"1488" => "Trollhättan",
"1489" => "Alingsås",
"1490" => "Borås",
"1491" => "Ulricehamn",
"1492" => "Åmål",
"1493" => "Mariestad",
"1494" => "Lidköping",
"1495" => "Skara",
"1496" => "Skövde",
"1497" => "Hjo",
"1498" => "Tidaholm",
"1499" => "Falköping"
},
"S" => {
"1715" => "Kil",
"1730" => "Eda",
"1737" => "Torsby",
"1760" => "Storfors",
"1761" => "Hammarö",
"1762" => "Munkfors",
"1763" => "Forshaga",
"1764" => "Grums",
"1765" => "Årjäng",
"1766" => "Sunne",
"1780" => "Karlstad",
"1781" => "Kristinehamn",
"1782" => "Filipstad",
"1783" => "Hagfors",
"1784" => "Arvika",
"1785" => "Säffle"
},
"T" => {
"1814" => "Lekeberg",
"1860" => "Laxå",
"1861" => "Hallsberg",
"1862" => "Degerfors",
"1863" => "Hällefors",
"1864" => "Ljusnarsberg",
"1880" => "Örebro",
"1881" => "Kumla",
"1882" => "Askersund",
"1883" => "Karlskoga",
"1884" => "Nora",
"1885" => "Lindesberg"
},
"U" => {
"1904" => "Skinnskatteberg",
"1907" => "Surahammar",
"1960" => "Kungsör",
"1961" => "Hallstahammar",
"1962" => "Norberg",
"1980" => "Västerås",
"1981" => "Sala",
"1982" => "Fagersta",
"1983" => "Köping",
"1984" => "Arboga"
},
"W" => {
"2021" => "Vansbro",
"2023" => "Malung",
"2026" => "Gagnef",
"2029" => "Leksand",
"2031" => "Rättvik",
"2034" => "Orsa",
"2039" => "Älvdalen",
"2061" => "Smedjebacken",
"2062" => "Mora",
"2080" => "Falun",
"2081" => "Borlänge",
"2082" => "Säter",
"2083" => "Hedemora",
"2084" => "Avesta",
"2085" => "Ludvika"
},
"X" => {
"2101" => "Ockelbo",
"2104" => "Hofors",
"2121" => "Ovanåker",
"2132" => "Nordanstig",
"2161" => "Ljusdal",
"2180" => "Gävle",
"2181" => "Sandviken",
"2182" => "Söderhamn",
"2183" => "Bollnäs",
"2184" => "Hudiksvall"
},
"Y" => {
"2260" => "Ånge",
"2262" => "Timrå",
"2280" => "Härnösand",
"2281" => "Sundsvall",
"2282" => "Kramfors",
"2283" => "Sollefteå",
"2284" => "Örnsköldsvik"
},
"Z" => {
"2303" => "Ragunda",
"2305" => "Bräcke",
"2309" => "Krokom",
"2313" => "Strömsund",
"2321" => "Åre",
"2326" => "Berg",
"2361" => "Härjedalen",
"2380" => "Östersund"
},
"AC" => {
"2401" => "Nordmaling",
"2403" => "Bjurholm",
"2404" => "Vindeln",
"2409" => "Robertsfors",
"2417" => "Norsjö",
"2418" => "Malå",
"2421" => "Storuman",
"2422" => "Sorsele",
"2425" => "Dorotea",
"2460" => "Vännäs",
"2462" => "Vilhelmina",
"2463" => "Åsele",
"2480" => "Umeå",
"2481" => "Lycksele",
"2482" => "Skellefteå"
},
"BD" => {
"2505" => "Arvidsjaur",
"2506" => "Arjeplog",
"2510" => "Jokkmokk",
"2513" => "Överkalix",
"2514" => "Kalix",
"2518" => "Övertorneå",
"2521" => "Pajala",
"2523" => "Gällivare",
"2560" => "Älvsbyn",
"2580" => "Luleå",
"2581" => "Piteå",
"2582" => "Boden",
"2583" => "Haparanda",
"2584" => "Kiruna"
}
}
LAN = {
"stockholm" => "A",
"uppsala" => "C",
"södermanland" => "D",
"östergötland" => "E",
"jönköping" => "F",
"kronoberg" => "G",
"kalmar" => "H",
"gotland" => "I",
"blekinge" => "K",
"skåne" => "M",
"halland" => "N",
"västra götaland" => "O",
"värmland" => "S",
"örebro" => "T",
"västmanland" => "U",
"dalarna" => "W",
"gävleborg" => "X",
"västernorrland" => "Y",
"jämtland" => "Z",
"västerbotten" => "AC",
"norrbotten" => "BD"
}
class SweMap
public
def self.load(filename, mode=:kommuns)
begin
return self.new(filename, mode)
rescue
error
end
end
def style(name, attribute, value)
begin
set_style(get_element(name), attribute, value)
rescue
error
end
end
def link(name, url, title=nil)
begin
link_to(get_element(name), url, title)
rescue
error
end
end
def write(filename)
begin
open(filename, "w") { |f| @doc.write_to(f, :encoding => 'UTF-8') }
rescue
error
end
end
private
def initialize(filename, mode)
@mode = mode
open(filename) { |f| @doc = Nokogiri::XML(f) }
raise "Could not find #{filename}" if @doc === nil
@doc.errors.each { |e| raise "Parse error in #{filename}" if e.fatal? }
@doc.root['xmlns:xlink'] = "http://www.w3.org/1999/xlink"
if @mode == :kommuns
@BCS = {}
SCB.each_value {|h| h.each_pair { |c,k| @BCS[k.downcase] = c } }
end
end
def get_element(name)
if @mode == :kommuns
id = get_kommun_id(name)
else
id = get_county_id(name)
end
el = @doc.at_css "*[id=\"#{id}\"]"
if not (el and el.elem?)
raise "Could not find id=\"#{id}\" in the SVG!"
end
return el
end
def get_kommun_id(kommun)
if kommun.is_a? Fixnum
id = "0" * (4-Math.log10(kommun+1).ceil) + kommun.to_s
else
id = @BCS[kommun.to_s.strip.downcase]
end
if not id
raise "Where is '#{kommun}'? Check that you have the right name."
end
return id
end
def get_county_id(county)
county = county.to_s
if county.length > 2
s = county.downcase
id = LAN[s]
id = LAN["#{s}s"] if not id
if not id
raise "Where is '#{county}'? Check that you have the right name."
end
return id
else
return county
end
end
def set_style(group, attribute, value)
re = Regexp.new "#{Regexp.quote(attribute)}\s*:[^;]*;"
group.traverse do |el|
if el.elem?
if el.has_attribute? "style" and el["style"].strip.length > 0
style = el["style"]
if style.match re
style = style.sub(re, "#{attribute}: #{value};")
else
style += " #{attribute}: #{value};"
end
el["style"] = style
else
el["style"] = "#{attribute}: #{value};"
end
end
end
end
def link_to(el, url, title)
par = @doc.create_element 'a'
par["xlink:href"] = url
par["xlink:title"] = title if title
par.parent = el.parent
el.parent = par
end
def error
STDERR.puts "Error: #{$!}"
end
end
File history
Click on a date/time to view the file as it appeared at that time.
Date/Time | Thumbnail | Dimensions | User | Comment | |
---|---|---|---|---|---|
current | 06:25, 26 September 2010 | 290 × 654 (262 KB) | Hydrox (talk | contribs) | {{Information |Description={{en|1=Swedish general election 2010 relative coalition support breakdown by municipality. Although the Red-Greens are dominant on a wider area, the urban population in South decided the election for the Alliance. The data has b |
You cannot overwrite this file.
File usage on Commons
The following page uses this file:
File usage on other wikis
The following other wikis use this file:
- Usage on ast.wikipedia.org
- Usage on en.wikipedia.org