|
""" |
|
Copy from https://github.com/Toblerity/Shapely/blob/master/docs/code/figures.py |
|
""" |
|
|
|
from math import sqrt |
|
from shapely import affinity |
|
|
|
GM = (sqrt(5)-1.0)/2.0 |
|
W = 8.0 |
|
H = W*GM |
|
SIZE = (W, H) |
|
|
|
BLUE = '#6699cc' |
|
GRAY = '#999999' |
|
DARKGRAY = '#333333' |
|
YELLOW = '#ffcc33' |
|
GREEN = '#339933' |
|
RED = '#ff3333' |
|
BLACK = '#000000' |
|
|
|
COLOR_ISVALID = { |
|
True: BLUE, |
|
False: RED, |
|
} |
|
|
|
|
|
def plot_line(ax, ob, color=GRAY, zorder=1, linewidth=3, alpha=1): |
|
x, y = ob.xy |
|
ax.plot(x, y, color=color, linewidth=linewidth, solid_capstyle='round', zorder=zorder, alpha=alpha) |
|
|
|
|
|
def plot_coords(ax, ob, color=BLACK, zorder=1, alpha=1): |
|
x, y = ob.xy |
|
ax.plot(x, y, color=color, zorder=zorder, alpha=alpha) |
|
|
|
|
|
def color_isvalid(ob, valid=BLUE, invalid=RED): |
|
if ob.is_valid: |
|
return valid |
|
else: |
|
return invalid |
|
|
|
|
|
def color_issimple(ob, simple=BLUE, complex=YELLOW): |
|
if ob.is_simple: |
|
return simple |
|
else: |
|
return complex |
|
|
|
|
|
def plot_line_isvalid(ax, ob, **kwargs): |
|
kwargs["color"] = color_isvalid(ob) |
|
plot_line(ax, ob, **kwargs) |
|
|
|
|
|
def plot_line_issimple(ax, ob, **kwargs): |
|
kwargs["color"] = color_issimple(ob) |
|
plot_line(ax, ob, **kwargs) |
|
|
|
|
|
def plot_bounds(ax, ob, zorder=1, alpha=1): |
|
x, y = zip(*list((p.x, p.y) for p in ob.boundary)) |
|
ax.plot(x, y, 'o', color=BLACK, zorder=zorder, alpha=alpha) |
|
|
|
|
|
def add_origin(ax, geom, origin): |
|
x, y = xy = affinity.interpret_origin(geom, origin, 2) |
|
ax.plot(x, y, 'o', color=GRAY, zorder=1) |
|
ax.annotate(str(xy), xy=xy, ha='center', |
|
textcoords='offset points', xytext=(0, 8)) |
|
|
|
|
|
def set_limits(ax, x0, xN, y0, yN): |
|
ax.set_xlim(x0, xN) |
|
ax.set_xticks(range(x0, xN+1)) |
|
ax.set_ylim(y0, yN) |
|
ax.set_yticks(range(y0, yN+1)) |
|
ax.set_aspect("equal") |
|
|