barwy kategorii
This commit is contained in:
26
app.py
26
app.py
@@ -901,27 +901,29 @@ def category_to_color(name: str, min_hue_gap_deg: int = 18) -> str:
|
||||
# Pełne pokrycie koła barw 0..360
|
||||
hue_deg = mix % 360
|
||||
|
||||
# Odpychanie lokalne: mała losowa korekta hue, aby podobne nazwy nie dawały prawie identycznych kolorów
|
||||
gap = (rotl(mix, 17) % (2*min_hue_gap_deg)) - min_hue_gap_deg # w zakresie [-gap, +gap]
|
||||
# Odpychanie lokalne: mała korekta hue, aby podobne nazwy nie dawały prawie identycznych kolorów
|
||||
gap = (rotl(mix, 17) % (2*min_hue_gap_deg)) - min_hue_gap_deg # [-gap, +gap]
|
||||
hue_deg = (hue_deg + gap) % 360
|
||||
|
||||
# Stałe, „bezpieczne” S i L dla dobrej rozróżnialności
|
||||
s = 0.78
|
||||
l = 0.55
|
||||
# Ciemniejszy profil: mniej rażący na ekranie
|
||||
# Bazowe S/L
|
||||
s = 0.75
|
||||
l = 0.52
|
||||
|
||||
# Minimalna wariacja S/L (±0.03..0.04), aby dodatkowo różnicować podobne hue
|
||||
s_var = ((rotl(mix, 29) % 7) - 3) / 100.0
|
||||
l_var = ((rotl(mix, 53) % 7) - 3) / 100.0
|
||||
s = min(0.9, max(0.7, s + s_var))
|
||||
l = min(0.65, max(0.48, l + l_var))
|
||||
# Ograniczona wariacja, węższe widełki
|
||||
s_var = ((rotl(mix, 29) % 5) - 2) / 100.0 # ±0.02
|
||||
l_var = ((rotl(mix, 53) % 7) - 3) / 100.0 # ±0.03
|
||||
s = min(0.82, max(0.68, s + s_var))
|
||||
l = min(0.56, max(0.46, l + l_var))
|
||||
|
||||
# colorsys.hls_to_rgb używa H,L,S w [0..1], więc hue trzeba przeskalować
|
||||
h = hue_deg / 360.0 # [0..1]
|
||||
# Konwersja HLS->RGB (colorsys: H, L, S w [0..1])
|
||||
h = hue_deg / 360.0
|
||||
r, g, b = colorsys.hls_to_rgb(h, l, s)
|
||||
|
||||
return f"#{int(round(r*255)):02x}{int(round(g*255)):02x}{int(round(b*255)):02x}"
|
||||
|
||||
|
||||
|
||||
def get_total_expenses_grouped_by_category(
|
||||
show_all, range_type, start_date, end_date, user_id, category_id=None
|
||||
):
|
||||
|
Reference in New Issue
Block a user