annotate py/stats2.py @ 72:1d8dc3ed22cf

Restore the default size of the high score list. In an era of megabyte JavaScript libraries, ten lines of text is not too much.
author John "Elwin" Edwards
date Sun, 20 Mar 2016 07:59:22 -0400
parents 876786c55450
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
1 #!/usr/bin/python3
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
2
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
3 import psycopg2
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
4 import rlgall
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
5 from datetime import datetime
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
6
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
7 sitename = "rlgallery.org"
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
8 svgpath = rlgall.webdir
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
9 timestr = datetime.utcnow().strftime("%Y-%m-%d %H:%M")
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
10
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
11 dochead = """<?xml version="1.0" encoding="UTF-8"?>
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
12 <svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="900" height="600">
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
13 """
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
14 stylesheet = """<style type="text/css">
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
15 rect.frame {{
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
16 fill:#ffffff;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
17 fill-opacity:1;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
18 stroke:#000000;
40
1ddd2d950e31 SVG charts: reduce frame stroke width.
John "Elwin" Edwards
parents: 39
diff changeset
19 stroke-width:2;
38
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
20 stroke-opacity:1;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
21 }}
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
22 rect.bar {{
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
23 fill:#{0};
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
24 fill-opacity:1;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
25 stroke:#000000;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
26 stroke-width:2;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
27 stroke-opacity:1;
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
28 }}
56
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
29 g.bar3d polygon {{
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
30 fill:#{0};
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
31 fill-opacity:1;
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
32 stroke:#000000;
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
33 stroke-width:1;
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
34 stroke-opacity:1;
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
35 }}
38
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
36 </style>
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
37 """
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
38 framerect = '<rect width="750" height="500" x="100" y="50" class="frame"/>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
39 barstr = '<rect width="{0}" height="{1}" x="{2}" y="{3}" class="bar"/>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
40 xllabel = '<text x="{0}" y="570" font-size="15" text-anchor="middle">{1}</text>\n'
56
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
41 ylabel = '<text x="90" y="{0:.2f}" font-size="16" text-anchor="end">{1}</text>\n'
38
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
42 xlabelf = '<text x="475" y="590" font-size="15" text-anchor="middle">{0}</text>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
43 ltitle = '<text x="100" y="35" font-size="16" text-anchor="start">{0}</text>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
44 ctitle = '<text x="475" y="34" font-size="18" text-anchor="middle">{0}</text>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
45 rtitle = '<text x="850" y="35" font-size="16" text-anchor="end">{0}</text>\n'
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
46 ylabelf = """<g transform="translate(100, 300)">
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
47 <g transform="rotate(-90)">
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
48 <text x="0" y="-60" font-size="16" text-anchor="middle">{0}</text>
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
49 </g>
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
50 </g>
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
51 """
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
52
56
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
53 def makepolygon(coords):
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
54 points = [ "{0:.2f},{1:.2f}".format(pt[0], pt[1]) for pt in coords ]
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
55 pointstr = " ".join(points)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
56 return '<polygon points="{}"/>\n'.format(pointstr)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
57
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
58 def bar3d(x, w, h):
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
59 ydelta = w / 2
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
60 xdelta = ydelta / 3
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
61 flowerleft = (x, 550)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
62 flowerright = (x + w, 550)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
63 fupperleft = (x, 550 - h)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
64 fupperright = (x + w, 550 - h)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
65 blowerright = (x + w + xdelta, 550 - ydelta)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
66 bupperleft = (x + xdelta, 550 - h - ydelta)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
67 bupperright = (x + w + xdelta, 550 - h - ydelta)
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
68 frontface = makepolygon([flowerleft, flowerright, fupperright, fupperleft])
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
69 rightface = makepolygon([blowerright, flowerright, fupperright, bupperright])
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
70 topface = makepolygon([bupperleft, bupperright, fupperright, fupperleft])
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
71 gopen = '<g class="bar3d" clip-path="url(#framer)">\n'
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
72 gclose = '</g>\n'
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
73 return gopen + "".join([frontface, rightface, topface]) + gclose
5cf88bd4e556 stats2.py: add some 3D perspective to the graphs.
John "Elwin" Edwards
parents: 45
diff changeset
74
45
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
75 class SVGChart():
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
76 def __init__(self, filename):
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
77 self.of = open(filename, "w", encoding="utf-8")
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
78 self.of.write(dochead)
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
79 def style(self, barcolor):
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
80 self.of.write(stylesheet.format(barcolor))
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
81 def write(self, obj):
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
82 self.of.write(obj)
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
83 def close(self):
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
84 self.of.write('</svg>\n')
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
85 self.of.close()
0f4163dbbafc SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents: 43
diff changeset
86
38
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
87 def ylimits(x):
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff changeset
88 ll = [2, 3, 4, 5, 6, 8, 10, 15]
d2c3c29ca4f9 Add a new statistics script that creates SVG plots.
John "Elwin" Edwards
parents:
diff