public
Created

Milla's version of horizons in python

  • Download Gist
horizon2.py
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
 
import numpy as np
import matplotlib.pyplot as plt
 
def makeLayer(y, height):
neg=0.0
pos=0.0
if y > 0:
if y - height >= 0:
pos = height
y -= pos
else:
pos = y
elif y < 0:
if y + height <= 0:
neg = height
y += neg
else:
neg = -y
return pos, neg
 
def horizonPlot(x, y, nfolds=3, negcolor='CornflowerBlue', poscolor='DarkGreen'):
fig, ax = plt.subplots(figsize=(17,3), dpi=300)
alpha = 1.0/nfolds
vlayer = np.vectorize(makeLayer)
height = np.ceil(np.abs(y).max()/nfolds)
while (y != 0).any():
 
layer = vlayer(y,height)
y -= layer[0];
y += layer[1]
ax.fill_between(x, 0, layer[0], color=poscolor, alpha=alpha)
ax.fill_between(x, height-layer[1], height, color=negcolor, alpha=alpha)
ax.set_yticks([])
ax.set_xlim([x.min(), x.max()])
ax.set_ylim([0, height])
return fig
 
if 1:
x = np.linspace(0, np.pi*4, 137)
y = (2*np.random.normal(size=137) + x**2)
xx = np.hstack([-1*x[::-1], x])
yy = np.hstack([-1*y[::-1], y])
fig = horizonPlot(xx, yy, nfolds=3)

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.