Mercurial > hg > rlgallery-misc
annotate py/stats2.py @ 86:5f1b4d3151bb
Add some neglected dgamelaunch initialization commands.
| author | John "Elwin" Edwards | 
|---|---|
| date | Sat, 24 Nov 2018 10:34:26 -0500 | 
| parents | 876786c55450 | 
| children | 
| 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 | 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: 
45diff
changeset | 29 g.bar3d polygon {{ | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 30 fill:#{0}; | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 31 fill-opacity:1; | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 32 stroke:#000000; | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 33 stroke-width:1; | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 34 stroke-opacity:1; | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
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: 
45diff
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: 
45diff
changeset | 53 def makepolygon(coords): | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
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: 
45diff
changeset | 55 pointstr = " ".join(points) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 56 return '<polygon points="{}"/>\n'.format(pointstr) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 57 | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 58 def bar3d(x, w, h): | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 59 ydelta = w / 2 | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 60 xdelta = ydelta / 3 | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 61 flowerleft = (x, 550) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 62 flowerright = (x + w, 550) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 63 fupperleft = (x, 550 - h) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 64 fupperright = (x + w, 550 - h) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 65 blowerright = (x + w + xdelta, 550 - ydelta) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 66 bupperleft = (x + xdelta, 550 - h - ydelta) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 67 bupperright = (x + w + xdelta, 550 - h - ydelta) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 68 frontface = makepolygon([flowerleft, flowerright, fupperright, fupperleft]) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 69 rightface = makepolygon([blowerright, flowerright, fupperright, bupperright]) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 70 topface = makepolygon([bupperleft, bupperright, fupperright, fupperleft]) | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
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: 
45diff
changeset | 72 gclose = '</g>\n' | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 73 return gopen + "".join([frontface, rightface, topface]) + gclose | 
| 
5cf88bd4e556
stats2.py: add some 3D perspective to the graphs.
 John "Elwin" Edwards parents: 
45diff
changeset | 74 | 
| 45 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 75 class SVGChart(): | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 76 def __init__(self, filename): | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 77 self.of = open(filename, "w", encoding="utf-8") | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 78 self.of.write(dochead) | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 79 def style(self, barcolor): | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 80 self.of.write(stylesheet.format(barcolor)) | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 81 def write(self, obj): | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 82 self.of.write(obj) | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 83 def close(self): | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 84 self.of.write('</svg>\n') | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
changeset | 85 self.of.close() | 
| 
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
 John "Elwin" Edwards parents: 
43diff
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
changeset | 89 m = 1 | 
