예제 #1
0
def set_myattrs(n, nhl):
    normalcolor = color.hsb(0.66, 1, 0.6)
    highlight = color.hsb(0, 1, 0.6)
    if n == nhl:
        return [highlight]
    else:
        return [normalcolor]
def make_stride_figure(c, lowerstride, uperstride=1, nrentries=6):
    ht = 0.5
    wd = 2
    dist = 0.2
    textcolor = color.hsb(0.02, 1, 0.6)
    for n in range(nrentries):
        x = n*(wd+dist)
        c.stroke(path.rect(x, 0, wd, ht))
        c.text(x+0.5*wd, 0.5*ht, str(n), [text.halign.center, text.valign.middle])

    for n in range(nrentries-1):
        x = n*(wd+dist)
        c.stroke(path.curve(x-dist/3, ht+0.5*dist,
                            x+0.3*wd, ht+3*dist,
                            x+0.7*wd, ht+3*dist,
                            x+wd+dist/3, ht+0.5*dist),
                 [deco.earrow.large])
        c.text(x+0.5*wd, ht+3.2*dist, r'\Large 8', [text.halign.center, textcolor])

    if lowerstride:
        for n in range((nrentries-1)//lowerstride):
            x = n*lowerstride*(wd+dist)
            c.stroke(path.curve(x-dist/3, -0.5*dist,
                                x+0.5*wd, -5*dist,
                                x+(lowerstride-0.5)*wd+lowerstride*dist, -5*dist,
                                x+lowerstride*wd+(lowerstride-0.7)*dist, -0.5*dist),
                     [deco.earrow.large])
            c.text(x+0.5*lowerstride*wd+dist,-5.2*dist, r'\Large %i' % (lowerstride*8),
                   [text.halign.center, text.valign.top, textcolor])
예제 #3
0
def make_stride_figure(c, lowerstride, uperstride=1, nrentries=6):
    ht = 0.5
    wd = 2
    dist = 0.2
    textcolor = color.hsb(0.02, 1, 0.6)
    for n in range(nrentries):
        x = n * (wd + dist)
        c.stroke(path.rect(x, 0, wd, ht))
        c.text(x + 0.5 * wd, 0.5 * ht, str(n),
               [text.halign.center, text.valign.middle])

    for n in range(nrentries - 1):
        x = n * (wd + dist)
        c.stroke(
            path.curve(x - dist / 3, ht + 0.5 * dist, x + 0.3 * wd,
                       ht + 3 * dist, x + 0.7 * wd, ht + 3 * dist,
                       x + wd + dist / 3, ht + 0.5 * dist),
            [deco.earrow.large])
        c.text(x + 0.5 * wd, ht + 3.2 * dist, r'\Large 8',
               [text.halign.center, textcolor])

    if lowerstride:
        for n in range((nrentries - 1) // lowerstride):
            x = n * lowerstride * (wd + dist)
            c.stroke(
                path.curve(x - dist / 3, -0.5 * dist, x + 0.5 * wd, -5 * dist,
                           x + (lowerstride - 0.5) * wd + lowerstride * dist,
                           -5 * dist,
                           x + lowerstride * wd + (lowerstride - 0.7) * dist,
                           -0.5 * dist), [deco.earrow.large])
            c.text(x + 0.5 * lowerstride * wd + dist, -5.2 * dist,
                   r'\Large %i' % (lowerstride * 8),
                   [text.halign.center, text.valign.top, textcolor])
예제 #4
0
 def HLcolor(self, t):
     """Half-life color scheme"""
     if (type(t) != type(1.0) and type(t) != type(1)) or t == 0: return rgb(.5, .5, .5)
     if t == float("inf"): return rgb.black
     x = log(t/self.HLmin)/log(pi*self.HLmax/self.HLmin) if t else 1
     x = min(max(0,x),1)
     return hsb(0.90*x, 1, 1)
 def draw(self):
     p = path.path(path.moveto(*self.corners[0]),
                   path.lineto(*self.corners[1]),
                   path.lineto(*self.corners[2]),
                   path.lineto(*self.corners[3]),
                   path.closepath())
     fillcolor = color.hsb(2/3*(1-(self.counter-1)/(self.nsquares-1)), 0.2, 1)
     self.c.stroke(p, [deco.filled([fillcolor])])
     x, y = 0.5*(self.corners[0]+self.corners[2])
     s = int(np.sum(np.abs(self.corners[1]-self.corners[0])))
     self.c.text(x, y, str(s),
                 [text.halign.center, text.valign.middle,
                  text.size(min(s, 5))])
     self.counter = self.counter+1
 def draw(self):
     p = path.path(path.moveto(*self.corners[0]),
                   path.lineto(*self.corners[1]),
                   path.lineto(*self.corners[2]),
                   path.lineto(*self.corners[3]), path.closepath())
     fillcolor = color.hsb(
         2 / 3 * (1 - (self.counter - 1) / (self.nsquares - 1)), 0.2, 1)
     self.c.stroke(p, [deco.filled([fillcolor])])
     x, y = 0.5 * (self.corners[0] + self.corners[2])
     s = int(np.sum(np.abs(self.corners[1] - self.corners[0])))
     self.c.text(
         x, y, str(s),
         [text.halign.center, text.valign.middle,
          text.size(min(s, 5))])
     self.counter = self.counter + 1
def arraygraphics(a,
                  idxstr,
                  title=True,
                  xscale=1.0,
                  fgcolor=color.grey(1),
                  bgcolor=color.hsb(0.9, 1, 0.5)):
    """create a graphical representation of a two-dimensional array
    
    a         array containing the data to be shown
    slicestr  string defining the slice to be highlighted
    xscale    PyX scaling for text
    fgcolor   color of highlighted data
    bgcolor   color of highlighted cells

    """
    assert a.ndim == 2
    n0, n1 = a.shape
    highlighted = np.zeros_like(a, dtype=bool)
    exec("highlighted{} = True".format(idxstr))
    unit.set(xscale=xscale)
    text.set(text.LatexRunner)
    text.preamble(
        r'\usepackage[sfdefault,scaled=.85,lining]{FiraSans}\usepackage{newtxsf}'
    )
    c = canvas.canvas()
    for ny, nx in zip(*np.nonzero(highlighted)):
        c.fill(path.rect(nx, n0 - ny, 1, -1), [bgcolor])
    c.stroke(path.rect(0, 0, n1, n0))
    for nx in range(1, n1):
        c.stroke(path.line(nx, 0, nx, n0))
    for ny in range(1, n0):
        c.stroke(path.line(0, ny, n1, ny))
    textcentered = [text.halign.center, text.valign.middle]
    textcentered_highlighted = textcentered + [fgcolor]
    for nx in range(n1):
        for ny in range(n0):
            if highlighted[ny, nx]:
                textattrs = textcentered_highlighted
            else:
                textattrs = textcentered
            c.text(nx + 0.5, n0 - ny - 0.5, a[ny, nx], textattrs)
    if title:
        textcolor = bgcolor
    else:
        textcolor = color.grey(1)
    titlestr = r"\Large a" + idxstr.replace('%', '\%')
    c.text(0.5 * n1, n0 + 0.4, titlestr, [text.halign.center, textcolor])
    return c
def arraygraphics(a, idxstr, title=True, xscale=1.0,
               fgcolor=color.grey(1), bgcolor=color.hsb(0.9, 1, 0.5)):
    """create a graphical representation of a two-dimensional array
    
    a         array containing the data to be shown
    slicestr  string defining the slice to be highlighted
    xscale    PyX scaling for text
    fgcolor   color of highlighted data
    bgcolor   color of highlighted cells

    """
    assert a.ndim == 2
    n0, n1 = a.shape
    highlighted = np.zeros_like(a, dtype=bool)
    exec("highlighted{} = True".format(idxstr))
    unit.set(xscale=xscale)
    text.set(text.LatexRunner)
    text.preamble(r'\usepackage[sfdefault,scaled=.85,lining]{FiraSans}\usepackage{newtxsf}')
    c = canvas.canvas()
    for ny, nx in zip(*np.nonzero(highlighted)):
        c.fill(path.rect(nx, n0-ny, 1, -1), [bgcolor])
    c.stroke(path.rect(0, 0, n1, n0))
    for nx in range(1, n1):
        c.stroke(path.line(nx, 0, nx, n0))
    for ny in range(1, n0):
        c.stroke(path.line(0, ny, n1, ny))
    textcentered = [text.halign.center, text.valign.middle]
    textcentered_highlighted = textcentered+[fgcolor]
    for nx in range(n1):
        for ny in range(n0):
            if highlighted[ny, nx]:
                textattrs = textcentered_highlighted
            else:
                textattrs = textcentered
            c.text(nx+0.5, n0-ny-0.5, a[ny, nx], textattrs)
    if title:
        textcolor = bgcolor
    else:
        textcolor = color.grey(1)
    titlestr = r"\Large a"+idxstr.replace('%', '\%')
    c.text(0.5*n1, n0+0.4, titlestr, [text.halign.center, textcolor])
    return c
예제 #9
0
    c.stroke(path.line(1.5*x1+fak*(x2-x1), 1.5*y1+fak*(y2-y1),
                       1.5*x2-fak*(x2-x1), 1.5*y2-fak*(y2-y1)), 
               [arrowcolor, deco.earrow.Large, deco.barrow.Large, style.linewidth.THIck])

dy = 0.8
dx = 1.5
versionoff = 1.5
cf = canvas.canvas()
hueoff = 0.17
nr_revisions = 0
for nr, (name, versions) in enumerate((('file 1', (0, 2, 4, 5)),
                                       ('file 2', (0, 1, 2, 3, 5)),
                                       ('file 3', (1, 4, 5)))):
    nr_revisions = max(nr_revisions, max(versions))
    hue = hueoff+nr/3
    cf.text(0, -nr*dy, name, [color.hsb(hue, 1, 0.5), text.valign.middle])
    for nver, (v1, v2) in enumerate(zip(versions[:-1], versions[1:])):
        y = -(nr+0.4)*dy
        lv = len(versions)-1
        xll = v1*dx+versionoff+0.1
        yll = y
        width = (v2-v1)*dx-0.2
        height = 0.8*dy
        cf.fill(path.rect(xll, yll, width, height),
                [color.hsb(hue, 1-(lv-1-nver)/(lv-1)*0.7, 0.6)])
        cf.text(xll+0.5*width, yll+0.5*height, gethashstring(),
                [text.size(-4), text.halign.center, text.valign.middle, color.grey(1)])
for n in range(nr_revisions):
    xcenter = (n+0.5)*dx+versionoff
    y = 0.5
    cf.text(xcenter, y, gethashstring(), [text.size(-4), text.halign.center])
예제 #10
0
import numpy as np
import numpy.polynomial.polynomial as P

from pyx import color, deco, graph, style, text, unit

np.random.seed(987)
x = np.pi*np.linspace(0, 1, 100)
y = np.sin(x)+0.1*np.random.rand(100)
fit = P.Polynomial(P.polyfit(x, y, 2))

text.set(text.LatexRunner)
text.preamble(r'\usepackage[sfdefault,scaled=.85,lining]{FiraSans}\usepackage{newtxsf}')
unit.set(xscale=1.2)

g = graph.graphxy(width=8,
        x=graph.axis.lin(title=r'\Large $x$', divisor=np.pi,
            texter=graph.axis.texter.rational(suffix=r'\pi')),
        y=graph.axis.lin(min=0, max=1.1, title=r'\Large $y$',
            parter=graph.axis.parter.lin(tickdists=[0.2])))
origdata = list(zip(x, y))
symbolattrs = [deco.filled, color.hsb(0.6, 1, 0.7)]
g.plot(graph.data.points(origdata, x=1, y=2),
       [graph.style.symbol(graph.style.symbol.circle, 0.07,
                           symbolattrs=symbolattrs)])
fitdata = list(zip(x, fit(x)))
lineattrs = [color.hsb(0.05, 1, 0.7), style.linewidth.THick]
g.plot(graph.data.points(fitdata, x=1, y=2),
       [graph.style.line(lineattrs=lineattrs)])
g.writePDFfile()
예제 #11
0
    for (key, y_data) \
            in [("num_low_cond", num_low_cond),
                ("num_low", num_low),
                ("num_mid_cond", num_mid_cond),
                ("num_mid", num_mid),
                ("num_high_cond", num_high_cond),
                ("num_high", num_high),
                ("mass_low_cond", mass_low_cond),
                ("mass_low", mass_low),
                ("mass_mid_cond", mass_mid_cond),
                ("mass_mid", mass_mid),
                ("mass_high_cond", mass_high_cond),
                ("mass_high", mass_high)]:
        g = graphs[plot_info[key]["graph"]]
        if use_color:
            grey_color = color.hsb(plot_info[key]["color"].hsb().color["h"],
                                   plot_info[key]["grey_level"], 1)
            style_attrs = [plot_info[key]["linewidth"], grey_color]
        else:
            grey_color = color.grey(1 - plot_info[key]["grey_level"])
            style_attrs = [plot_info[key]["linewidth"], grey_color]
        plot_data = zip(time[1:] / 60, y_data)
        g.plot(graph.data.points(plot_data, x=1, y=2),
               styles=[graph.style.line(lineattrs=style_attrs)])

    for (key, y_data) \
            in [("num_low_cond", num_low_cond_smooth),
                ("num_low", num_low_smooth),
                ("num_mid_cond", num_mid_cond_smooth),
                ("num_mid", num_mid_smooth),
                ("num_high_cond", num_high_cond_smooth),
                ("num_high", num_high_smooth),
예제 #12
0
def rainbow(n, b=1.0):
    """Rainbow color range"""
    return [ hsb((1.0*x)/n,1,b) for x in range(n) ]
예제 #13
0
def rainbowDict(keys, b=1.0):
    """Rainbow colors assigned to sorted keys"""
    n = len(keys)
    knew = [k for k in keys]
    knew.sort()
    return dict([(k, hsb((1.0 * x) / n, 1, b)) for (x, k) in enumerate(knew)])
예제 #14
0
c.stroke(path.line(0, 0.4 * h, w, 0.4 * h), [deco.earrow])
c.stroke(path.line(0, 0, 0, h), [deco.earrow])
with open('parrondo.dat') as file:
    dataset = file.readlines()

data = [tuple(map(int, line.strip('\n').split())) for line in dataset]
scale = lambda x: ((x + 1000) / 2500) * h
datascaled = [tuple(map(scale, x)) for x in data]
p1 = path.path(path.moveto(0, 0.4 * h))
p2 = path.path(path.moveto(0, 0.4 * h))
p3 = path.path(path.moveto(0, 0.4 * h))
for n, (a, b, aabb) in enumerate(datascaled):
    p1.append(path.lineto(w * n / 1000, a))
    p2.append(path.lineto(w * n / 1000, b))
    p3.append(path.lineto(w * n / 1000, aabb))
c.stroke(p1, [color.rgb(1, 0, 0)])
c.stroke(p2, [color.rgb(0, 1, 0)])
c.stroke(p3, [color.rgb(0, 0, 1)])

c1 = canvas.canvas()
c1.fill(path.circle(0, 0, 0.08 * w), [color.hsb(0.1, 1, 0.6)])
c1.text(0, 0, r'\Large\textit{\bfseries 1}',
        [text.halign.center, text.valign.middle,
         color.hsb(0.1, 1, 1)])
c1.fill(path.circle(0.18 * w, 0, 0.08 * w), [color.hsb(0.1, 1, 0.6)])
c1.text(0.18 * w, 0, r'\Large\Smiley',
        [text.halign.center, text.valign.middle,
         color.hsb(0.1, 1, 1)])
c.insert(c1, [trafo.translate(0.1 * w, 0.8 * h)])
c.writeGSfile(device="png16m", resolution=300)
예제 #15
0
text.preamble(r'''\usepackage[scaled=0.85,lining]{FiraMono}
                  \usepackage[utf8]{inputenc}''')
unit.set(xscale=1.2)

c = canvas.canvas()
dx = 0.3
h = 4
w = 6.5
p = path.rect(-dx, -dx, w+2*dx, h+2*dx)
p = deformer.smoothed(0.5).deform(p)
c.fill(p, [color.grey(0.5), trafo.translate(0.05, -0.05)])
c.fill(p, [color.grey(0.9)])

c1 = canvas.canvas([canvas.clip(p)])
c2 = canvas.canvas()
textcolor = color.hsb(0.6, 0.3, 1)
t = """\Huge
$2x^4+10x^3$

p1 = \{4: 2, 3: 10\}

$5x^2-x+32$

p2 = \{2: 5, 1: -1, 0: 32\}

multiply(p1, p2)
"""
c2.text(0, 0, t, [text.parbox(2*w), textcolor])
c1.insert(c2, [trafo.rotate(20).translated(-0.2*w, 0.9*h)])
c.insert(c1)
예제 #16
0
from pyx import canvas, color, deformer, path, text, trafo, unit

text.set(text.LatexRunner)
text.preamble(r'''\usepackage[scaled=0.85,lining]{FiraMono}
                  \usepackage[utf8]{inputenc}''')
pistring = '3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852'
char_per_line = 25
pistring = ' '.join(
    [pistring[n * char_per_line:(n + 1) * char_per_line] for n in range(10)])
unit.set(xscale=1.45)

c = canvas.canvas()
dx = 0.3
h = 4
w = 6.5
p = path.rect(-dx, -dx, w + 2 * dx, h + 2 * dx)
p = deformer.smoothed(0.5).deform(p)
c.fill(p, [color.grey(0.5), trafo.translate(0.05, -0.05)])
c.fill(p, [color.grey(0.9)])
c.text(0, 0, r'\noindent\texttt{{{}}}'.format(pistring),
       [text.valign.bottom, text.parbox(5)])
c.text(0.5 * w, 0.5 * h, r'\Huge $\pi$', [
    text.halign.center, text.valign.middle,
    color.hsb(0.66, 0.8, 1),
    color.transparency(0.2),
    trafo.scale(5.8)
])

c.writePDFfile()
예제 #17
0
p = path.rect(-dx, -dx, w + 2 * dx, h + 2 * dx)
p = deformer.smoothed(0.5).deform(p)
c.fill(p, [color.grey(0.5), trafo.translate(0.05, -0.05)])
c.fill(p, [color.grey(0.9)])

c2 = canvas.canvas([canvas.clip(p)])
primetimes = [p for p in prime_list(2359) if is_time(p)]
s = text.text(0, 0, formattime(primetimes[0]))
textwidth, textheight = s.width, s.height
nx = int(w / unit.tocm(textwidth))
xoff = 0.5 * (w - 1.2 * textwidth * nx + 0.2 * textwidth)
for n, p in enumerate(primetimes):
    s = formattime(p)
    x = xoff + (n % nx) * 1.2 * textwidth
    y = 1.03 * h - (n // nx) * textheight * 1.4
    c2.text(x, y, s, [color.hsb(0.67, 0.4, 0.8)])
c.insert(c2)

r1 = 0.95 * h / 2
r2 = 0.8 * h / 2
for n in range(12):
    x = sin(radians(n * 30))
    y = cos(radians(n * 30))
    c.stroke(
        path.line(w / 2 + r1 * x, h / 2 + r1 * y, w / 2 + r2 * x,
                  h / 2 + r2 * y), [style.linewidth.THICk])
x = sin(radians(70))
y = cos(radians(70))
c.stroke(
    path.line(w / 2 - 0.1 * x, h / 2 - 0.1 * y, w / 2 + r1 * x,
              h / 2 + r1 * y),
예제 #18
0
                  path.arcn(0.1, 0, 0.1, 160, 0))
    cwrite.stroke(
        p, [color,
            trafo.scale(size).rotated(-30).translated(0, -0.4 * size)])
    return cwrite


text.set(text.LatexRunner)
text.preamble(r'\usepackage{arev}\usepackage[T1]{fontenc}')
c = canvas.canvas()

wd = 6.9
ht = 3.5
gitlabfgcolor = color.grey(0.4)
gitlabbgcolor = color.grey(0.97)
maintainercolor = color.hsb(0.7, 1, 0.5)
usercolor = color.hsb(0.05, 1, 0.5)
c.stroke(path.rect(0, 0, wd, ht), [
    deformer.smoothed(0.1), gitlabfgcolor, style.linewidth.Thick,
    deco.filled([gitlabbgcolor])
])

clabel = canvas.canvas()
labeltext = text.text(0, 0, r'\textsf{\bfseries Gitlab}', [color.grey(1)])
extrawd = 0.15
labelbox = labeltext.bbox().enlarged(extrawd)
clabel.fill(labelbox.path(), [gitlabfgcolor, deformer.smoothed(0.1)])
clabel.insert(labeltext)
c.insert(clabel, [trafo.translate(extrawd, ht + extrawd)])

c.text(wd + 0.4, ht - 0.5, r'\footnotesize\textsf{read/write permissions}')
예제 #19
0
def rainbow(n):
    return [ hsb((1.0*x)/n,1,1) for x in range(n) ]
        inner_offset = framefactor*boxsize
    p = (path.rect(x+outer_offset, y+outer_offset,
                   w-2*outer_offset, h-2*outer_offset)
         + path.rect(x+inner_offset, y+inner_offset,
                     w-2*inner_offset, h-2*inner_offset).reversed()
         )
    c.fill(p, [framecolor])


ncols = 6
nrows = ncols
boxsize = 1
angle = radians(40)
reducedboxsize = 0.65*boxsize

ex1color = color.hsb(0, 1, 0.7)
ex2color = color.hsb(0.28, 1, 0.5)
ex3color = color.hsb(0.56, 1, 0.6)
ex4color = color.hsb(0.84, 1, 0.6)

text.set(text.LatexRunner)
preamble = r'''\usepackage[T1]{fontenc}
               \usepackage{bera}
               \renewcommand*\familydefault{\ttdefault}
               \usepackage{color}'''
for nr, elem in enumerate((ex1color, ex2color, ex3color, ex4color)):
    preamble = preamble+r'\definecolor{{ex{}color}}{{hsb}}{{{}, {}, {}}}'.format(
                  nr+1, elem.h, elem.s, elem.b)
text.preamble(preamble)
unit.set(xscale=1.2)
예제 #21
0
    return cf


text.set(text.LatexRunner)
text.preamble(r'\usepackage{arev}\usepackage[T1]{fontenc}')

c = canvas.canvas()
ht = 5
htlabel = 1
wd = 3.5
vdist = 0.05
hdist = 1
size = 1.2

for nr, (label, boxcolor, symbolcolor, status) in enumerate(
    (('working directory', color.hsb(0.87, 1, 0.6), color.rgb(0.6, 0,
                                                              0), 'modified'),
     ('staging area', color.hsb(0.2, 1, 0.6), color.rgb(0, 0.5, 0), 'staged'),
     ('repository (.git)', color.hsb(0.53, 1,
                                     0.6), color.grey(0.3), 'committed'))):
    xmid = nr * (wd + hdist) + 0.5 * wd
    c.stroke(path.rect(nr * (wd + hdist), 0, wd, ht),
             [deformer.smoothed(0.3), boxcolor, style.linewidth.Thick])
    c.fill(path.rect(nr * (wd + hdist), ht + vdist, wd, htlabel),
           [deformer.smoothed(0.3), boxcolor])
    c.text(xmid, ht + vdist + 0.5 * htlabel, label,
           [text.halign.center, text.valign.middle,
            color.grey(1)])
    c.insert(filesymbol(size, symbolcolor), [trafo.translate(xmid, 0.5 * ht)])
    c.text(xmid, 0.2 * ht, status, [text.halign.center, symbolcolor])
for nr, operation in enumerate(('git add', 'git commit')):
예제 #22
0
    clist.append((nx, ny, c[nx * nlen:(nx + 1) * nlen,
                            ny * nlen:(ny + 1) * nlen]))
ex = futures.ProcessPoolExecutor(max_workers=4)
results = list(ex.map(partial(mandelbrot_iteration, niter), clist))

data = []
procdict = {}
for r in results:
    nx, ny, procid, partialdata = r
    for mx, my in product(range(nlen), repeat=2):
        cval = c[nx * nlen + mx, ny * nlen + my]
        data.append((cval.real, cval.imag, partialdata[mx, my]))
    procdict[(nx, ny)] = procid
procids = set(procdict.values())
colors = [
    color.hsb(n / (len(procids) - 1) * 0.67, 1, 1) for n in range(len(procids))
]
proccolors = dict(zip(procids, colors))

text.set(text.LatexRunner)
text.preamble(r'\usepackage{arev}\usepackage[T1]{fontenc}')
g = graph.graphxy(width=8,
                  height=8,
                  x=graph.axis.lin(title=r'$\mathrm{Re}(c)$'),
                  y=graph.axis.lin(title=r'$\mathrm{Im}(c)$'))
g.plot(graph.data.points(data, x=1, y=2, color=3),
       [graph.style.density(keygraph=None)])

dx = (xmax - xmin) / n
dy = (ymax - ymin) / n
for k, v in procdict.items():
예제 #23
0
파일: dvifile.py 프로젝트: atal2003/test
    def special(self, s, fontmap):
        x = self.pos[_POS_H] * self.pyxconv
        y = -self.pos[_POS_V] * self.pyxconv
        if self.debug:
            self.debugfile.write("%d: xxx '%s'\n" % (self.filepos, s))
        if not s.startswith("PyX:"):
            logger.warning("ignoring special '%s'" % s)
            return

        # it is in general not safe to continue using the currently active font because
        # the specials may involve some gsave/grestore operations
        self.flushtext(fontmap)

        command, args = s[4:].split()[0], s[4:].split()[1:]
        if command == "color_begin":
            if args[0] == "cmyk":
                c = color.cmyk(float(args[1]), float(args[2]), float(args[3]),
                               float(args[4]))
            elif args[0] == "gray":
                c = color.gray(float(args[1]))
            elif args[0] == "hsb":
                c = color.hsb(float(args[1]), float(args[2]), float(args[3]))
            elif args[0] == "rgb":
                c = color.rgb(float(args[1]), float(args[2]), float(args[3]))
            elif args[0] == "RGB":
                c = color.rgb(
                    int(args[1]) / 255.0,
                    int(args[2]) / 255.0,
                    int(args[3]) / 255.0)
            elif args[0] == "texnamed":
                try:
                    c = getattr(color.cmyk, args[1])
                except AttributeError:
                    raise RuntimeError("unknown TeX color '%s', aborting" %
                                       args[1])
            elif args[0] == "pyxcolor":
                # pyx.color.cmyk.PineGreen or
                # pyx.color.cmyk(0,0,0,0.0)
                pat = re.compile(
                    r"(pyx\.)?(color\.)?(?P<model>(cmyk)|(rgb)|(grey)|(gray)|(hsb))[\.]?(?P<arg>.*)"
                )
                sd = pat.match(" ".join(args[1:]))
                if sd:
                    sd = sd.groupdict()
                    if sd["arg"][0] == "(":
                        numpat = re.compile(
                            r"[+-]?((\d+\.\d*)|(\d*\.\d+)|(\d+))([eE][+-]\d+)?"
                        )
                        arg = tuple(
                            [float(x[0]) for x in numpat.findall(sd["arg"])])
                        try:
                            c = getattr(color, sd["model"])(*arg)
                        except TypeError or AttributeError:
                            raise RuntimeError(
                                "cannot access PyX color '%s' in TeX, aborting"
                                % " ".join(args[1:]))
                    else:
                        try:
                            c = getattr(getattr(color, sd["model"]), sd["arg"])
                        except AttributeError:
                            raise RuntimeError(
                                "cannot access PyX color '%s' in TeX, aborting"
                                % " ".join(args[1:]))
                else:
                    raise RuntimeError(
                        "cannot access PyX color '%s' in TeX, aborting" %
                        " ".join(args[1:]))
            else:
                raise RuntimeError(
                    "color model '%s' cannot be handled by PyX, aborting" %
                    args[0])

            self.beginsubpage([c])
        elif command == "color_end":
            self.endsubpage()
        elif command == "rotate_begin":
            self.beginsubpage([trafo.rotate_pt(float(args[0]), x, y)])
        elif command == "rotate_end":
            self.endsubpage()
        elif command == "scale_begin":
            self.beginsubpage(
                [trafo.scale_pt(float(args[0]), float(args[1]), x, y)])
        elif command == "scale_end":
            self.endsubpage()
        elif command == "epsinclude":
            # parse arguments
            argdict = {}
            for arg in args:
                name, value = arg.split("=")
                argdict[name] = value

            # construct kwargs for epsfile constructor
            epskwargs = {}
            epskwargs["filename"] = argdict["file"]
            epskwargs["bbox"] = bbox.bbox_pt(float(argdict["llx"]),
                                             float(argdict["lly"]),
                                             float(argdict["urx"]),
                                             float(argdict["ury"]))
            if "width" in argdict:
                epskwargs["width"] = float(argdict["width"]) * unit.t_pt
            if "height" in argdict:
                epskwargs["height"] = float(argdict["height"]) * unit.t_pt
            if "clip" in argdict:
                epskwargs["clip"] = int(argdict["clip"])
            self.actpage.insert(
                epsfile.epsfile(x * unit.t_pt, y * unit.t_pt, **epskwargs))
        elif command == "marker":
            if len(args) != 1:
                raise RuntimeError("marker contains spaces")
            for c in args[0]:
                if c not in string.ascii_letters + string.digits + "@":
                    raise RuntimeError("marker contains invalid characters")
            if args[0] in self.actpage.markers:
                raise RuntimeError("marker name occurred several times")
            self.actpage.markers[args[0]] = x * unit.t_pt, y * unit.t_pt
        else:
            raise RuntimeError("unknown PyX special '%s', aborting" % command)
예제 #24
0
        outer_offset = 0
        inner_offset = framefactor * boxsize
    p = (path.rect(x + outer_offset, y + outer_offset, w - 2 * outer_offset,
                   h - 2 * outer_offset) +
         path.rect(x + inner_offset, y + inner_offset, w - 2 * inner_offset,
                   h - 2 * inner_offset).reversed())
    c.fill(p, [framecolor])


ncols = 6
nrows = ncols
boxsize = 1
angle = radians(40)
reducedboxsize = 0.65 * boxsize

ex1color = color.hsb(0, 1, 0.7)
ex2color = color.hsb(0.28, 1, 0.5)
ex3color = color.hsb(0.56, 1, 0.6)
ex4color = color.hsb(0.84, 1, 0.6)

text.set(text.LatexRunner)
preamble = r'''\usepackage[T1]{fontenc}
               \usepackage{bera}
               \renewcommand*\familydefault{\ttdefault}
               \usepackage{color}'''
for nr, elem in enumerate((ex1color, ex2color, ex3color, ex4color)):
    preamble = preamble + r'\definecolor{{ex{}color}}{{hsb}}{{{}, {}, {}}}'.format(
        nr + 1, elem.h, elem.s, elem.b)
text.preamble(preamble)
unit.set(xscale=1.2)
예제 #25
0
from pyx import canvas, color, path, text, unit

text.set(text.LatexRunner)
text.preamble(
    r'\usepackage{arev}\usepackage[T1]{fontenc}\usepackage{nicefrac}')
unit.set(xscale=1.2, wscale=1.2)

c = canvas.canvas()
side = 4
lightcolor = color.hsb(0.65, 0.2, 1)
darkcolor = color.hsb(0.65, 1, 1)
c.fill(
    path.path(path.moveto(0, 0), path.lineto(side, 0),
              path.arc(0, 0, side, 0, 90), path.closepath()), [lightcolor])
c.stroke(path.path(path.arc(0, 0, side, 0, 90)), [darkcolor])
c.stroke(path.rect(0, 0, side, side))
ticklen = 0.15
for tick in (0, 1):
    dist = tick * side
    c.stroke(path.line(dist, 0, dist, -ticklen))
    c.text(dist, -1.5 * ticklen, str(tick),
           [text.halign.center, text.valign.top])
    c.stroke(path.line(0, dist, -ticklen, dist))
    c.text(-1.5 * ticklen, dist, str(tick),
           [text.halign.right, text.valign.middle])
c.text(0.4 * side, 0.4 * side, r'\huge$\nicefrac{\pi}{4}$',
       [text.halign.center, text.valign.middle, darkcolor])
c.writePDFfile()
예제 #26
0
xmin = -2
xmax = 1
width = npts
ymin = -1.5
ymax = 1.5
height = npts
niter = 2000

cnvs = canvas.canvas()
unit.set(wscale=0.8)
cellheight = 0.17

for nr, ndiv in enumerate((2, 4, 8, 16, 32)):
    nrproc, start, ende, data = mandelbrot(xmin, xmax, width, ymin, ymax, height,
                      npts, ndiv, niter)
    offset = -(nrproc+1.2)*cellheight*nr
    cnvs.text(-0.2, offset+2*cellheight, "$n=%s$" % ndiv**2,
              [text.halign.right, text.valign.middle])
    cnvs.stroke(path.line(0, -0.2*cellheight+offset, 0,
        (nrproc+0.2)*cellheight+offset))
    cnvs.stroke(path.line(ende-start, -0.2*cellheight+offset, ende-start,
        (nrproc+0.2)*cellheight+offset))
    for d in data:
        colours = color.hsb(0.667*d[0]/(nrproc-1), 1, 0.3)
        colourf = color.hsb(0.667*d[0]/(nrproc-1), 0.2, 1)
        cnvs.stroke(path.rect(d[1], d[0]*cellheight+offset, (d[2]-d[1]), 0.8*cellheight),
                [colours, deco.filled([colourf])])

cnvs.writePDFfile()
cnvs.writeGSfile(device="png16m", resolution=600)
예제 #27
0
파일: dvifile.py 프로젝트: mjg/PyX-svn
    def special(self, s, fontmap):
        x =  self.pos[_POS_H] * self.pyxconv
        y = -self.pos[_POS_V] * self.pyxconv
        if self.debug:
            self.debugfile.write("%d: xxx '%s'\n" % (self.filepos, s))
        if not s.startswith("PyX:"):
            logger.warning("ignoring special '%s'" % s)
            return

        # it is in general not safe to continue using the currently active font because
        # the specials may involve some gsave/grestore operations
        self.flushtext(fontmap)

        command, args = s[4:].split()[0], s[4:].split()[1:]
        if command == "color_begin":
            if args[0] == "cmyk":
                c = color.cmyk(float(args[1]), float(args[2]), float(args[3]), float(args[4]))
            elif args[0] == "gray":
                c = color.gray(float(args[1]))
            elif args[0] == "hsb":
                c = color.hsb(float(args[1]), float(args[2]), float(args[3]))
            elif args[0] == "rgb":
                c = color.rgb(float(args[1]), float(args[2]), float(args[3]))
            elif args[0] == "RGB":
                c = color.rgb(int(args[1])/255.0, int(args[2])/255.0, int(args[3])/255.0)
            elif args[0] == "texnamed":
                try:
                    c = getattr(color.cmyk, args[1])
                except AttributeError:
                    raise RuntimeError("unknown TeX color '%s', aborting" % args[1])
            elif args[0] == "pyxcolor":
                # pyx.color.cmyk.PineGreen or
                # pyx.color.cmyk(0,0,0,0.0)
                pat = re.compile(r"(pyx\.)?(color\.)?(?P<model>(cmyk)|(rgb)|(grey)|(gray)|(hsb))[\.]?(?P<arg>.*)")
                sd = pat.match(" ".join(args[1:]))
                if sd:
                    sd = sd.groupdict()
                    if sd["arg"][0] == "(":
                        numpat = re.compile(r"[+-]?((\d+\.\d*)|(\d*\.\d+)|(\d+))([eE][+-]\d+)?")
                        arg = tuple([float(x[0]) for x in numpat.findall(sd["arg"])])
                        try:
                            c = getattr(color, sd["model"])(*arg)
                        except TypeError or AttributeError:
                            raise RuntimeError("cannot access PyX color '%s' in TeX, aborting" % " ".join(args[1:]))
                    else:
                        try:
                            c = getattr(getattr(color, sd["model"]), sd["arg"])
                        except AttributeError:
                            raise RuntimeError("cannot access PyX color '%s' in TeX, aborting" % " ".join(args[1:]))
                else:
                    raise RuntimeError("cannot access PyX color '%s' in TeX, aborting" % " ".join(args[1:]))
            else:
                raise RuntimeError("color model '%s' cannot be handled by PyX, aborting" % args[0])

            self.beginsubpage([c])
        elif command == "color_end":
            self.endsubpage()
        elif command == "rotate_begin":
            self.beginsubpage([trafo.rotate_pt(float(args[0]), x, y)])
        elif command == "rotate_end":
            self.endsubpage()
        elif command == "scale_begin":
            self.beginsubpage([trafo.scale_pt(float(args[0]), float(args[1]), x, y)])
        elif command == "scale_end":
            self.endsubpage()
        elif command == "epsinclude":
            # parse arguments
            argdict = {}
            for arg in args:
                name, value = arg.split("=")
                argdict[name] = value

            # construct kwargs for epsfile constructor
            epskwargs = {}
            epskwargs["filename"] = argdict["file"]
            epskwargs["bbox"] = bbox.bbox_pt(float(argdict["llx"]), float(argdict["lly"]),
                                           float(argdict["urx"]), float(argdict["ury"]))
            if "width" in argdict:
                epskwargs["width"] = float(argdict["width"]) * unit.t_pt
            if "height" in argdict:
                epskwargs["height"] = float(argdict["height"]) * unit.t_pt
            if "clip" in argdict:
               epskwargs["clip"] = int(argdict["clip"])
            self.actpage.insert(epsfile.epsfile(x * unit.t_pt, y * unit.t_pt, **epskwargs))
        elif command == "marker":
            if len(args) != 1:
                raise RuntimeError("marker contains spaces")
            for c in args[0]:
                if c not in string.ascii_letters + string.digits + "@":
                    raise RuntimeError("marker contains invalid characters")
            if args[0] in self.actpage.markers:
                raise RuntimeError("marker name occurred several times")
            self.actpage.markers[args[0]] = x * unit.t_pt, y * unit.t_pt
        else:
            raise RuntimeError("unknown PyX special '%s', aborting" % command)
예제 #28
0
text.set(text.LatexRunner)
text.preamble(r'\usepackage{arev}\usepackage[T1]{fontenc}')
unit.set(xscale=1.3)

c = canvas.canvas()
pos = [(0, 1), (sin(2 * pi / 3), cos(2 * pi / 3)),
       (-sin(2 * pi / 3), cos(2 * pi / 3))]
sfak = 1.5
for x, y in pos:
    c.insert(server(0.3), [trafo.translate(sfak * x, sfak * y)])
    c.insert(client(), [trafo.scale(0.5).translated(3 * x, 3 * y + 0.15)])
    c.stroke(path.line(2.7 * x, 2.7 * y, 1.9 * x, 1.9 * y), [
        arrowcolor, deco.earrow.large, deco.barrow.large, style.linewidth.THick
    ])
for phi in (0, 120, 240):
    c.stroke(
        path.curve(-sfak * sin(2 * pi / 3) + 0.4, -0.5 * sfak + 0.15,
                   -sfak * sin(2 * pi / 3) + 0.8, -0.5 * sfak + 0.35,
                   sfak * sin(2 * pi / 3) - 0.8, -0.5 * sfak + 0.35,
                   sfak * sin(2 * pi / 3) - 0.4, -0.5 * sfak + 0.15), [
                       arrowcolor, deco.earrow.large, deco.barrow.large,
                       style.linewidth.THick,
                       trafo.rotate(phi)
                   ])
c.insert(server(0.5, color.hsb(0.5, 0.8, 0.5), 0.13))
c.text(0.8, 0.2, 'Gitlab / Github server',
       [color.hsb(0.5, 0.8, 0.5), text.size.small])

c.writePDFfile()
예제 #29
0
def rainbowDict(keys, b=1.0):
    n = len(keys)
    knew = [k for k in keys]
    knew.sort()
    return dict([ (k,hsb((1.0*x)/n,1,b)) for (x,k) in enumerate(knew) ])
from pyx import canvas, color, path, text, unit

text.set(text.LatexRunner)
text.preamble(r'\usepackage[sfdefault,scaled=.85,lining]{FiraSans}\usepackage{newtxsf}')
text.preamble(r'\usepackage{nicefrac}')
unit.set(xscale=1.6, wscale=1.2)

c = canvas.canvas()
side = 4
lightcolor = color.hsb(0.65, 0.2, 1)
darkcolor = color.hsb(0.65, 1, 1)
c.fill(path.path(path.moveto(0, 0),
                 path.lineto(side, 0),
                 path.arc(0, 0, side, 0, 90),
                 path.closepath()), [lightcolor])
c.stroke(path.path(path.arc(0, 0, side, 0, 90)), [darkcolor])
c.stroke(path.rect(0, 0, side, side))
ticklen = 0.15
for tick in (0, 1):
    dist = tick*side
    c.stroke(path.line(dist, 0, dist, -ticklen))
    c.text(dist, -1.5*ticklen, str(tick), [text.halign.center, text.valign.top])
    c.stroke(path.line(0, dist, -ticklen, dist))
    c.text(-1.5*ticklen, dist, str(tick), [text.halign.right, text.valign.middle])
c.text(0.4*side, 0.4*side, r'\huge$\nicefrac{\pi}{4}$',
       [text.halign.center, text.valign.middle, darkcolor])
c.writePDFfile()
예제 #31
0
def rainbow(n, b=1.0):
    return [hsb((1.0 * x) / n, 1, b) for x in range(n)]
예제 #32
0
def rainbow(n, b=1.0):
	return [ hsb((1.0*x)/n,1,b) for x in range(n) ]
예제 #33
0
def rainbow(n, b=1.0):
    """Rainbow color range"""
    return [hsb((1.0 * x) / n, 1, b) for x in range(n)]
예제 #34
0
def rainbowDict(keys, b=1.0):
	n = len(keys)
	knew = [k for k in keys]
	knew.sort()
	return dict([ (k,hsb((1.0*x)/n,1,b)) for (x,k) in enumerate(knew) ])
예제 #35
0

c = canvas.canvas()
dx = 0.3
h = 4
w = 6.5
p = path.rect(-dx, -dx, w + 2 * dx, h + 2 * dx)
p = deformer.smoothed(0.5).deform(p)
c.fill(p, [color.grey(0.5), trafo.translate(0.05, -0.05)])

c1 = canvas.canvas([canvas.clip(p)])
c1.fill(p, [color.grey(0.9)])

np.random.seed = 42
game = Conway(300)
for _ in range(15):
    game.update()
world = game.world
xoff = -0.5 * w - dx
yoff = -0.5 * h - dx
delta = 0.1
for nx in range(game.size):
    for ny in range(game.size):
        if world[nx, ny]:
            p = path.rect(xoff + (nx + 0.1) * delta, yoff + (ny + 0.1) * delta,
                          0.8 * delta, 0.8 * delta)
            c1.fill(p, [color.hsb(0.25, 1, 0.5)])

c.insert(c1)
c.writeGSfile(device="png16m", resolution=300)
예제 #36
0
basename = os.path.splitext(sys.argv[0])[0]
baseprimes = [0, 2, 3, 5, 7]
ncolor = len(baseprimes) - 1
cancelled = set([0, 1])
for nr, baseprime in enumerate(baseprimes):
    if nr == 0:
        for n in range(2, 50):
            x = n % 25
            y = 2 - (n // 25)
            c.text(x + 0.5, y - 0.5, str(n),
                   [text.halign.center, text.valign.middle])
    else:
        cancelled.add(baseprime)
        hvalue = 1.1 * (nr - 1) / (ncolor - 1)
        hvalue = hvalue - int(hvalue)
        primecolor = color.hsb(hvalue, 1, 0.8)
        x = baseprime % 25
        y = 2 - (baseprime // 25)
        c.fill(path.rect(x, y, 1, -1), [primecolor])
        c.text(x + 0.5, y - 0.5, r'\textbf{%s}' % baseprime,
               [text.halign.center, text.valign.middle,
                color.grey(1)])
        for n in range(baseprime**2, 50, baseprime):
            if not n in cancelled:
                cancelled.add(n)
                x = n % 25
                y = 2 - (n // 25)
                c.stroke(path.line(x, y - 1, x + 1, y), [primecolor])
                c.stroke(path.line(x, y, x + 1, y - 1), [primecolor])
    draw_grid()
    cc = canvas.canvas()
예제 #37
0
def rainbowDict(keys, b=1.0):
    """Rainbow colors assigned to sorted keys"""
    n = len(keys)
    knew = [k for k in keys]
    knew.sort()
    return dict([ (k,hsb((1.0*x)/n,1,b)) for (x,k) in enumerate(knew) ])
c.text(1.5, 1.5, '1', [text.halign.center, text.valign.middle])
basename = os.path.splitext(sys.argv[0])[0]
baseprimes = [0, 2, 3, 5, 7]
ncolor = len(baseprimes)-1
cancelled = set([0, 1])
for nr, baseprime in enumerate(baseprimes):
    if nr == 0:
        for n in range(2, 50):
            x = n % 25
            y = 2-(n//25)
            c.text(x+0.5, y-0.5, str(n), [text.halign.center, text.valign.middle])
    else:
        cancelled.add(baseprime)
        hvalue = 1.1*(nr-1)/(ncolor-1)
        hvalue = hvalue-int(hvalue)
        primecolor = color.hsb(hvalue, 1, 0.8)
        x = baseprime % 25
        y = 2-(baseprime//25)
        c.fill(path.rect(x, y, 1, -1), [primecolor])
        c.text(x+0.5, y-0.5, r'\textbf{%s}' % baseprime,
               [text.halign.center, text.valign.middle, color.grey(1)])
        for n in range(baseprime**2, 50, baseprime):
            if not n in cancelled:
                cancelled.add(n)
                x = n % 25
                y = 2-(n//25)
                c.stroke(path.line(x, y-1, x+1, y), [primecolor])
                c.stroke(path.line(x, y, x+1, y-1), [primecolor])
    draw_grid()
    c.writePDFfile('%s_%s' % (basename, nr+1))