mirror of https://github.com/Kozea/pygal.git
Florian Mounier
13 years ago
8 changed files with 244 additions and 33 deletions
@ -1,3 +1,20 @@
|
||||
from collections import namedtuple |
||||
|
||||
Serie = namedtuple('Serie', ('title', 'values')) |
||||
Label = namedtuple('Label', ('label', 'pos')) |
||||
|
||||
|
||||
class Margin(object): |
||||
def __init__(self, top, right, bottom, left): |
||||
self.top = top |
||||
self.right = right |
||||
self.bottom = bottom |
||||
self.left = left |
||||
|
||||
@property |
||||
def x(self): |
||||
return self.left + self.right |
||||
|
||||
@property |
||||
def y(self): |
||||
return self.top + self.bottom |
||||
|
@ -0,0 +1,64 @@
|
||||
.graph > .background { |
||||
fill: black; |
||||
} |
||||
|
||||
.plot > .background { |
||||
fill: #111; |
||||
} |
||||
|
||||
.axis text { |
||||
fill: #777; |
||||
font-size: 12px; |
||||
font-family: sans; |
||||
} |
||||
|
||||
.axis.x text { |
||||
text-anchor: middle; |
||||
alignment-baseline: baseline; |
||||
} |
||||
|
||||
.axis.y text { |
||||
text-anchor: end; |
||||
alignment-baseline: middle; |
||||
} |
||||
|
||||
.axis .line { |
||||
stroke: #ccc; |
||||
} |
||||
|
||||
.axis .guide.line { |
||||
stroke: #555; |
||||
stroke-dasharray: 5,5; |
||||
} |
||||
|
||||
.series .dots .dot text { |
||||
font-size: 10px; |
||||
text-anchor: middle; |
||||
alignment-baseline: baseline; |
||||
stroke: none; |
||||
fill: none; |
||||
} |
||||
|
||||
.series .dots .dot:hover text { |
||||
fill: #ccc; |
||||
} |
||||
|
||||
.series .line { |
||||
fill: none; |
||||
stroke-width: 1.5px; |
||||
} |
||||
|
||||
.series .line:hover { |
||||
fill: none; |
||||
stroke-width: 3px; |
||||
} |
||||
|
||||
.serie-0 { |
||||
stroke: blue; |
||||
fill: blue; |
||||
} |
||||
|
||||
.serie-1 { |
||||
stroke: red; |
||||
fill: red; |
||||
} |
@ -1,7 +1,10 @@
|
||||
from pygal.line import Line |
||||
from math import cos, sin |
||||
|
||||
|
||||
def test_simple_line(): |
||||
line = Line(800, 600) |
||||
line.add('test', [10, 20, 5, 17]) |
||||
line.add('test2', [cos(x / 10.) for x in range(-30, 30, 5)]) |
||||
line.add('test2', [sin(x / 10.) for x in range(-30, 30, 5)]) |
||||
line.set_labels(map(str, range(-30, 30, 5))) |
||||
line._in_browser() |
||||
|
@ -0,0 +1,28 @@
|
||||
|
||||
|
||||
class Box(object): |
||||
def __init__(self, x, y, width, height): |
||||
self.x = x |
||||
self.y = y |
||||
self.width = width |
||||
self.height = height |
||||
|
||||
|
||||
class View(object): |
||||
def __init__(self, width, height, xmin, xmax, ymin, ymax): |
||||
self.width = width |
||||
self.height = height |
||||
self.box = Box(xmin, ymin, xmax - xmin, ymax - ymin) |
||||
|
||||
def x(self, x): |
||||
return self.width * (x - self.box.x) / float(self.box.width) |
||||
|
||||
def y(self, y): |
||||
return (self.height - self.height * |
||||
(y - self.box.y) / float(self.box.height)) |
||||
|
||||
def __call__(self, xy): |
||||
x, y = xy |
||||
return ( |
||||
self.x(x), |
||||
self.y(y)) |
Loading…
Reference in new issue