axi/examples/histogram.py

443 lines
6.6 KiB
Python

from __future__ import division
import axi
def main():
W = 8.5
H = 0.5
total = sum(x[1] for x in DATA)
lo = min(x[0] for x in DATA)
hi = max(x[0] for x in DATA)
peak = max(x[1] for x in DATA)
paths = []
path = []
for key, count in DATA:
x = W * (key - lo) / (hi - lo)
y = H * count / peak
path.append((x, -y))
if y > 0.01:
paths.append([(x, 0), (x, -y)])
paths.append(path)
paths.append([(0, 0), (W, 0)])
labels = [0, 1000, 2000, 3000, 3851]
for key in labels:
x = W * (key - lo) / (hi - lo)
paths.append([(x, 0.0), (x, 0.05)])
d = axi.Drawing(axi.text(str(key), axi.FUTURAL))
d = d.scale_to_fit_height(0.1)
d = d.move(x, 0.15, 0.5, 0)
paths.extend(d.paths)
title = 'Elevation Distribution (meters above sea level)'
d = axi.Drawing(axi.text(title, axi.FUTURAL))
d = d.scale_to_fit_height(0.15)
d = d.move(W / 2, 0.3, 0.5, 0)
paths.extend(d.paths)
d = axi.Drawing(paths)
d = d.rotate(180)
d = d.rotate_and_scale_to_fit(8.5, 8.5, step=90)
d = d.move(12, 8.5 / 2, 1, 0.5)
print d.bounds
d = d.sort_paths()
d = d.join_paths(0.01)
d = d.simplify_paths(0.001)
d.render().write_to_png('out.png')
d.dump('out.axi')
DATA = [
(0, 1860),
(10, 616),
(20, 13896),
(30, 7390),
(40, 17106),
(50, 17756),
(60, 19812),
(70, 20846),
(80, 26540),
(90, 32908),
(100, 30895),
(110, 30937),
(120, 34645),
(130, 39987),
(140, 50454),
(150, 43510),
(160, 45186),
(170, 46782),
(180, 48153),
(190, 53051),
(200, 56475),
(210, 67358),
(220, 66581),
(230, 62523),
(240, 63877),
(250, 65760),
(260, 69471),
(270, 68334),
(280, 64205),
(290, 65384),
(300, 67230),
(310, 70015),
(320, 74587),
(330, 79049),
(340, 84143),
(350, 88487),
(360, 92377),
(370, 100498),
(380, 86270),
(390, 82122),
(400, 80603),
(410, 84615),
(420, 92533),
(430, 89329),
(440, 86102),
(450, 87929),
(460, 86567),
(470, 82378),
(480, 81019),
(490, 79468),
(500, 76132),
(510, 76930),
(520, 72169),
(530, 70730),
(540, 72297),
(550, 72928),
(560, 75030),
(570, 77281),
(580, 78832),
(590, 80256),
(600, 82456),
(610, 83901),
(620, 82584),
(630, 84318),
(640, 82161),
(650, 80100),
(660, 79891),
(670, 80065),
(680, 77160),
(690, 72161),
(700, 69511),
(710, 67754),
(720, 65042),
(730, 63870),
(740, 64834),
(750, 64082),
(760, 61971),
(770, 61166),
(780, 60935),
(790, 59000),
(800, 57292),
(810, 56323),
(820, 56212),
(830, 56024),
(840, 62346),
(850, 59583),
(860, 57477),
(870, 56763),
(880, 56891),
(890, 54791),
(900, 55878),
(910, 54383),
(920, 54594),
(930, 54779),
(940, 54721),
(950, 54976),
(960, 54890),
(970, 54921),
(980, 54929),
(990, 55069),
(1000, 55110),
(1010, 55675),
(1020, 57084),
(1030, 58511),
(1040, 58725),
(1050, 59506),
(1060, 60498),
(1070, 62729),
(1080, 63675),
(1090, 64225),
(1100, 64607),
(1110, 65337),
(1120, 67527),
(1130, 65769),
(1140, 65712),
(1150, 65133),
(1160, 64530),
(1170, 65083),
(1180, 65451),
(1190, 64927),
(1200, 66665),
(1210, 68200),
(1220, 70238),
(1230, 72272),
(1240, 74862),
(1250, 77393),
(1260, 90007),
(1270, 89989),
(1280, 90317),
(1290, 89085),
(1300, 89867),
(1310, 89896),
(1320, 88303),
(1330, 88049),
(1340, 87744),
(1350, 88449),
(1360, 89547),
(1370, 90589),
(1380, 93502),
(1390, 93889),
(1400, 94315),
(1410, 95142),
(1420, 98384),
(1430, 99131),
(1440, 103998),
(1450, 102277),
(1460, 103992),
(1470, 106000),
(1480, 105960),
(1490, 109678),
(1500, 110972),
(1510, 110861),
(1520, 114622),
(1530, 119033),
(1540, 122392),
(1550, 121202),
(1560, 121773),
(1570, 124335),
(1580, 128502),
(1590, 130779),
(1600, 132780),
(1610, 135778),
(1620, 141292),
(1630, 141744),
(1640, 136584),
(1650, 140110),
(1660, 141461),
(1670, 139174),
(1680, 142406),
(1690, 150050),
(1700, 156269),
(1710, 157283),
(1720, 158085),
(1730, 158931),
(1740, 154644),
(1750, 155388),
(1760, 152779),
(1770, 151682),
(1780, 149647),
(1790, 144507),
(1800, 143324),
(1810, 144171),
(1820, 144580),
(1830, 141449),
(1840, 139113),
(1850, 135637),
(1860, 129574),
(1870, 124321),
(1880, 119062),
(1890, 114446),
(1900, 109406),
(1910, 105854),
(1920, 104861),
(1930, 102250),
(1940, 98704),
(1950, 97906),
(1960, 98738),
(1970, 98147),
(1980, 94073),
(1990, 88646),
(2000, 83503),
(2010, 81167),
(2020, 78390),
(2030, 73501),
(2040, 71495),
(2050, 68971),
(2060, 66484),
(2070, 64780),
(2080, 62488),
(2090, 59124),
(2100, 56963),
(2110, 55037),
(2120, 52282),
(2130, 50045),
(2140, 48638),
(2150, 46783),
(2160, 48194),
(2170, 46493),
(2180, 45299),
(2190, 44199),
(2200, 42657),
(2210, 41265),
(2220, 38577),
(2230, 36001),
(2240, 33838),
(2250, 31381),
(2260, 30262),
(2270, 28812),
(2280, 27107),
(2290, 25842),
(2300, 25865),
(2310, 25186),
(2320, 23732),
(2330, 21185),
(2340, 18564),
(2350, 17028),
(2360, 16239),
(2370, 15607),
(2380, 14477),
(2390, 13671),
(2400, 12906),
(2410, 12336),
(2420, 11296),
(2430, 10864),
(2440, 9934),
(2450, 9393),
(2460, 8790),
(2470, 8572),
(2480, 8408),
(2490, 8809),
(2500, 8465),
(2510, 8181),
(2520, 8110),
(2530, 8213),
(2540, 8098),
(2550, 7968),
(2560, 7695),
(2570, 7491),
(2580, 7294),
(2590, 6983),
(2600, 6874),
(2610, 6786),
(2620, 6471),
(2630, 6594),
(2640, 6591),
(2650, 6757),
(2660, 7133),
(2670, 7356),
(2680, 7262),
(2690, 6784),
(2700, 6326),
(2710, 6065),
(2720, 5742),
(2730, 5722),
(2740, 5833),
(2750, 6034),
(2760, 5777),
(2770, 5867),
(2780, 6003),
(2790, 5595),
(2800, 4554),
(2810, 3749),
(2820, 3102),
(2830, 2572),
(2840, 2097),
(2850, 1792),
(2860, 1535),
(2870, 1403),
(2880, 1244),
(2890, 1091),
(2900, 994),
(2910, 927),
(2920, 861),
(2930, 693),
(2940, 745),
(2950, 673),
(2960, 673),
(2970, 656),
(2980, 603),
(2990, 615),
(3000, 575),
(3010, 485),
(3020, 491),
(3030, 468),
(3040, 458),
(3050, 484),
(3060, 487),
(3070, 438),
(3080, 378),
(3090, 393),
(3100, 383),
(3110, 331),
(3120, 330),
(3130, 332),
(3140, 303),
(3150, 278),
(3160, 294),
(3170, 273),
(3180, 277),
(3190, 257),
(3200, 243),
(3210, 199),
(3220, 200),
(3230, 174),
(3240, 186),
(3250, 161),
(3260, 151),
(3270, 144),
(3280, 145),
(3290, 117),
(3300, 113),
(3310, 116),
(3320, 90),
(3330, 108),
(3340, 99),
(3350, 89),
(3360, 87),
(3370, 66),
(3380, 71),
(3390, 58),
(3400, 57),
(3410, 54),
(3420, 47),
(3430, 40),
(3440, 38),
(3450, 40),
(3460, 40),
(3470, 19),
(3480, 17),
(3490, 24),
(3500, 22),
(3510, 15),
(3520, 29),
(3530, 17),
(3540, 21),
(3550, 15),
(3560, 12),
(3570, 15),
(3580, 11),
(3590, 13),
(3600, 15),
(3610, 9),
(3620, 6),
(3630, 8),
(3640, 11),
(3650, 9),
(3660, 5),
(3670, 5),
(3680, 5),
(3690, 7),
(3700, 3),
(3710, 3),
(3720, 4),
(3730, 2),
(3740, 2),
(3750, 6),
(3760, 2),
(3770, 1),
(3780, 1),
(3790, 2),
(3800, 2),
(3810, 1),
(3820, 1),
(3830, 1),
(3840, 1),
(3851, 1),
]
if __name__ == '__main__':
main()