Merge pull request #20 from sepandhaghighi/bg-rgb-alpha

Improvement in Colors
pull/21/head
Sepand Haghighi 2021-09-28 14:04:32 +03:30 zatwierdzone przez GitHub
commit 5b82bc1c3c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
3 zmienionych plików z 71 dodań i 3 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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)

Wyświetl plik

@ -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())