kopia lustrzana https://github.com/sepandhaghighi/samila
commit
5b82bc1c3c
|
@ -17,3 +17,52 @@ def float_range(start, stop, step):
|
|||
while start < stop:
|
||||
yield float(start)
|
||||
start += step
|
||||
|
||||
|
||||
def distance_calc(s1, s2):
|
||||
"""
|
||||
Calculate Levenshtein distance between two words.
|
||||
|
||||
:param s1: first string
|
||||
:type s1 : str
|
||||
:param s2: second string
|
||||
:type s2 : str
|
||||
:return: distance between two string
|
||||
|
||||
References :
|
||||
1- https://stackoverflow.com/questions/2460177/edit-distance-in-python
|
||||
2- https://en.wikipedia.org/wiki/Levenshtein_distance
|
||||
"""
|
||||
if len(s1) > len(s2):
|
||||
s1, s2 = s2, s1
|
||||
|
||||
distances = range(len(s1) + 1)
|
||||
for i2, c2 in enumerate(s2):
|
||||
distances_ = [i2 + 1]
|
||||
for i1, c1 in enumerate(s1):
|
||||
if c1 == c2:
|
||||
distances_.append(distances[i1])
|
||||
else:
|
||||
distances_.append(
|
||||
1 + min((distances[i1], distances[i1 + 1], distances_[-1])))
|
||||
distances = distances_
|
||||
return distances[-1]
|
||||
|
||||
|
||||
def filter_color(color):
|
||||
"""
|
||||
Filter given color and return it
|
||||
|
||||
:param color: given color
|
||||
:type color: str or tuple
|
||||
:return: filtered version of color
|
||||
"""
|
||||
if isinstance(color, tuple):
|
||||
return color
|
||||
if isinstance(color, str):
|
||||
from .params import VALID_COLORS
|
||||
distance_list = list(map(lambda x: distance_calc(color, x),
|
||||
VALID_COLORS))
|
||||
min_distance = min(distance_list)
|
||||
return VALID_COLORS[distance_list.index(min_distance)]
|
||||
return None
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
import random
|
||||
import itertools
|
||||
import matplotlib.pyplot as plt
|
||||
from .functions import float_range
|
||||
from .functions import float_range, filter_color
|
||||
from .params import *
|
||||
|
||||
|
||||
|
@ -48,6 +48,7 @@ class GenerativeImage:
|
|||
def plot(
|
||||
self,
|
||||
color=DEFAULT_COLOR,
|
||||
bgcolor=DEFAULT_BACKGROUND_COLOR,
|
||||
spot_size=DEFAULT_SPOT_SIZE,
|
||||
size=DEFAULT_IMAGE_SIZE,
|
||||
projection=DEFAULT_PROJECTION):
|
||||
|
@ -56,6 +57,8 @@ class GenerativeImage:
|
|||
|
||||
:param color: point colors
|
||||
:type color: str
|
||||
:param bgcolor: background color
|
||||
:type bgcolor: str
|
||||
:param spot_size: point spot size
|
||||
:type spot_size: float
|
||||
:param size: figure size
|
||||
|
@ -64,8 +67,20 @@ class GenerativeImage:
|
|||
:type projection: str
|
||||
:return: None
|
||||
"""
|
||||
color = filter_color(color) if not None else DEFAULT_COLOR
|
||||
bgcolor = filter_color(
|
||||
bgcolor) if not None else DEFAULT_BACKGROUND_COLOR
|
||||
fig = plt.figure()
|
||||
fig.set_size_inches(size[0], size[1])
|
||||
fig.set_facecolor(bgcolor)
|
||||
ax = fig.add_subplot(111, projection=projection)
|
||||
ax.scatter(self.data2, self.data1, alpha=0.1, c=color, s=spot_size)
|
||||
ax.axis('off')
|
||||
ax.set_facecolor(bgcolor)
|
||||
ax.scatter(
|
||||
self.data2,
|
||||
self.data1,
|
||||
alpha=DEFAULT_ALPHA,
|
||||
edgecolors=color,
|
||||
s=spot_size)
|
||||
ax.set_axis_off()
|
||||
ax.patch.set_zorder(-1)
|
||||
ax.add_artist(ax.patch)
|
||||
|
|
|
@ -1,11 +1,15 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
"""Samila params."""
|
||||
import math
|
||||
from matplotlib import colors as mcolors
|
||||
|
||||
DEFAULT_START = -1 * math.pi
|
||||
DEFAULT_STOP = math.pi
|
||||
DEFAULT_STEP = 0.01
|
||||
DEFAULT_COLOR = "black"
|
||||
DEFAULT_BACKGROUND_COLOR = "white"
|
||||
DEFAULT_ALPHA = 0.1
|
||||
DEFAULT_IMAGE_SIZE = (10, 10)
|
||||
DEFAULT_SPOT_SIZE = 0.01
|
||||
DEFAULT_PROJECTION = None
|
||||
VALID_COLORS = list(dict(mcolors.BASE_COLORS, **mcolors.CSS4_COLORS).keys())
|
||||
|
|
Ładowanie…
Reference in New Issue