-
Notifications
You must be signed in to change notification settings - Fork 1
/
st-petersburg.clj
88 lines (63 loc) · 4.23 KB
/
st-petersburg.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
(ns ru.lj.alamar.elegraph
(:require spiral data image util))
(def уики (read-data "data/st-petersburg-2019-09-08/data.csv"))
(defn фракции [уик]
[(nth уик 14) (nth уик 15) (nth уик 13)])
(def избиратели second)
(defn явка [уик]
(/ (сумма (фракции уик)) (избиратели уик)))
(defn доля-ер [уик]
(/ (nth уик 14) (сумма (фракции уик))))
(def окно-явки (окно (fn [x] (Math/pow 10 (- 1 x))) (map явка уики)))
(def окно-ер (окно (fn [x] x) (map доля-ер уики)))
; 60x80
(def ширина 2560)
(def высота 3640)
(def высота-графика 3400)
(def высота-полоски 200)
(def фон (цвет 0xFF 0xFF 0xFF))
(def цвет-сетки (цвет 0xDD 0xDD 0xDD))
(def цвет-цифр (цвет 0x9A 0x9A 0x9A))
(def большая-сетка 3)
(def малая-сетка 2)
(def размер-шрифта 36)
(def холст (create-image ширина высота фон))
(сетка холст ширина высота-графика (/ 1 20) большая-сетка малая-сетка цвет-сетки размер-шрифта цвет-цифр окно-явки окно-ер)
(подписать холст цвет-цифр
(fn [рисунок]
(вывести-текст рисунок "программирование, идея — alamar.lj.ru" 24 (/ ширина 2) (+ высота 10) false true)
(вывести-текст рисунок "Голосование на участках Санкт-Петербурга" 48 1333 120 false false)
(вывести-текст рисунок "на выборах губернатора 8 сентября 2018" размер-шрифта 1647 190 false false)
(вывести-текст рисунок "явка →" размер-шрифта 75 -5 false false)
(вывести-текст рисунок "200 голосов, отданные за кандидатов:" размер-шрифта 1645 360 false false)
(вывести-текст рисунок "Беглова Александра Дмитриевича" размер-шрифта 1700 460 false false)
(вывести-текст рисунок "Тихонову Надежду Геннадьевну" размер-шрифта 1700 540 false false)
(вывести-текст рисунок "Амосова Михаила Ивановича" размер-шрифта 1700 620 false false)
(повернуть рисунок)
(вывести-текст рисунок "доля голосов, отданных Беглову →" размер-шрифта 235 -130 false false)))
(def шаблон (spiral))
(def цвета-фракций [
(цвет 0 0 0) ;; Беглов
(цвет 0 0x55 0xFF) ;; Тихонова
(цвет 0x55 0xFF 0) ;; Амосов
])
(образцы холст цвета-фракций 1670 480 20)
(defn упорядочить-фракции [уик]
(zip (фракции уик) цвета-фракций))
(defn сортировать-фракции [уик]
(reverse (sort-by first (упорядочить-фракции уик))))
(полоска холст высота-графика высота-полоски
(for [уик уики]
(let [смещение (int (* ширина (- 1 (окно-явки (явка уик)))))]
[смещение (упорядочить-фракции уик)])))
(сетка-для-полоски холст ширина высота-графика высота-полоски большая-сетка цвет-сетки (/ 1 20) окно-явки (/ 1 10) (окно identity [0 1]))
(println "Полоска нарисована")
(нанести холст 0 [ширина высота]
(for [уик (take 10000 уики)]
(let [смещение
[(int (* ширина (- 1 (окно-явки (явка уик)))))
(int (* высота-графика (окно-ер (доля-ер уик))))]]
[смещение шаблон (сортировать-фракции уик)]))
[фон цвет-сетки])
(println "Запись изображения")
(save-image холст "st-petersburg.png")