-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjunemann.clj
96 lines (71 loc) · 4.89 KB
/
junemann.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
87
88
89
90
91
92
93
94
(ns ru.lj.alamar.elegraph
(:require spiral data image util))
(def данные (read-data "data/junemann-2019-09-08/data.csv"))
(def заголовки (first данные))
(def уики (rest данные))
(defn фракции [уик]
(drop 13 уик))
(def избиратели first)
(defn явка [уик]
(/ (сумма (фракции уик)) (избиратели уик)))
(defn доля-ер [уик]
(/ (nth уик 16) (сумма (фракции уик))))
(def окно-явки (окно (fn [x] (Math/pow 20 (- 1 x))) (map явка уики)))
(def окно-ер (окно (fn [x] (- 1 (Math/pow 10 (- 1 x)))) (map доля-ер уики)))
; 60x80
(def ширина 600)
(def высота 800)
(def высота-графика 730)
(def высота-полоски 50)
(def фон (цвет 0xFF 0xFF 0xFF))
(def цвет-сетки (цвет 0xDD 0xDD 0xDD))
(def цвет-цифр (цвет 0x9A 0x9A 0x9A))
(def большая-сетка 1)
(def малая-сетка 0.5)
(def размер-шрифта 16)
(def холст (create-image ширина высота фон))
(сетка холст ширина высота-графика (/ 1 10) большая-сетка малая-сетка цвет-сетки размер-шрифта цвет-цифр окно-явки окно-ер)
(подписать холст цвет-цифр
(fn [рисунок]
(вывести-текст рисунок "программирование, идея — alamar.lj.ru" 14 (/ ширина 2) (+ высота 12) false true)
(вывести-текст рисунок "Голосование на участках ОИК №30 г. Москвы" 18 100 30 false false)
(вывести-текст рисунок "на выборах депутатов МГД 8 сентября 2019" размер-шрифта 172 50 false false)
(вывести-текст рисунок "явка →" размер-шрифта 10 15 false false)
(вывести-текст рисунок "50 голосов, отданные за кандидатов:" размер-шрифта 250 85 false false)
(вывести-текст рисунок "Викулина Петра Николаевича" размер-шрифта 260 120 false false)
(вывести-текст рисунок "Галибина Илью Геннадьевича" размер-шрифта 260 148 false false)
(вывести-текст рисунок "Жуковского Владислава Сергеевича" размер-шрифта 260 176 false false)
(вывести-текст рисунок "Русецкую Маргариту Николаевну" размер-шрифта 260 204 false false)
(вывести-текст рисунок "Цыбу Алексея Николаевича" размер-шрифта 260 232 false false)
(вывести-текст рисунок "Юнемана Романа Александровича" размер-шрифта 260 260 false false)
(повернуть рисунок)
(вывести-текст рисунок "доля голосов, отданных Русецкой →" размер-шрифта 390 -55 false false)))
(def шаблон (spiral))
(def цвета-фракций [
(цвет 0xAA 0x55 0) ;; Викулин
(цвет 0xFF 0xFF 0x30) ;; Галибин
(цвет 0xFA 0x00 0x57) ;; Жуковский
(цвет 0x14 0x0D 0x8E) ;; Русецкая
(цвет 0xFF 0x55 0xFF) ;; Цыба
(цвет 0x36 0xD0 0xAC) ;; Юнеман
])
(образцы холст цвета-фракций 250 130 7)
(defn упорядочить-фракции [уик]
(zip (фракции уик) цвета-фракций))
(defn сортировать-фракции [уик]
(reverse (sort-by first (упорядочить-фракции уик))))
(полоска холст высота-графика высота-полоски
(for [уик уики]
(let [смещение (int (* ширина (- 1 (окно-явки (явка уик)))))]
[смещение (упорядочить-фракции уик)])))
(сетка-для-полоски холст ширина высота-графика высота-полоски большая-сетка цвет-сетки (/ 1 10) окно-явки (/ 1 4) (окно identity [0 1]))
(println "Полоска нарисована")
(нанести холст 0 [ширина высота]
(for [уик (take 10000 уики)]
(let [смещение
[(int (* ширина (- 1 (окно-явки (явка уик)))))
(int (* высота-графика (окно-ер (доля-ер уик))))]]
[смещение шаблон (сортировать-фракции уик)]))
[фон цвет-сетки])
(println "Запись изображения")
(save-image холст "junemann.png")