sobota 27. dubna 2024

Třírozměrná sada dat zobrazená s Matlablib colorlab (numpy: funkční příklad)

Sada dat v tomto příkladu je třírozměrná. Každá linie na grafu je vytvořena z hodnot x, y a barvy c. Proměnná x obsahuje hodnoty na ose x, y obsahuje hodnoty na ose y, a c určuje barvu, která je použita pro vykreslení linie. Takže ve smyslu grafické reprezentace jsou data třírozměrná.

# Importování knihovny NumPy pro práci s numerickými daty
import numpy as np
# Importování modulu pyplot z knihovny Matplotlib pro vizualizaci dat
import matplotlib.pyplot as plt
# Importování modulu matplotlib pro manipulaci s colormapami
import matplotlib as mpl

# Počet linií
n_lines = 100
# Vytvoření pole hodnot x od 0 do 10 s 100 body
# hodnoty jsou rovnoměrně rozložené mezi hodnotami start a stop
# Parametr num určuje počet bodů vytvořených v rozsahu.
x = np.linspace(0, 10, 100)
# Výpočet sinusových hodnot pro pole x
y = np.sin(x[:, None] + np.pi * np.linspace(0, 1, n_lines))
# Vytvoření pole hodnot s rostoucí posloupností od 1 do n_lines
c = np.arange(1, n_lines + 1)

# Vytvoření nové colormapy na základě původní 'jet' colormapy, 
# která je vzorkována na základě počtu linií n_lines. 
# To znamená, že nízký počet n_lines jako 20 jednoduše přeskočí
# zbytek barev v colormapě, takže na grafu se vytvoří mezery.
# Hodnota 100, ale vytvoří plynulý přechod mezi barvami, který
# připomíná barvy duhy.
cmap = mpl.colormaps['jet'].resampled(n_lines)

# Vytvoření objektu figury a osy s nastaveným DPI na 100
fig, ax = plt.subplots(dpi=100)
# Vykreslení scatter plotu s body na souřadnicích c, c a
# barvami z colormapy cmap
dummie_cax = ax.scatter(c, c, c=c, cmap=cmap)
# Vymazání obsahu osy (Axes) před vykreslením nových dat
ax.cla()

# Vykreslení čar pro každý sloupec v matici y.T 
# s barvou určenou podle colormapy cmap
# .T je transponovaná matice - řádky matice se stávají sloupci a
# naopak.
# Po provedení transpozice je matice y je iterována po řádcích a
# každé yi reprezentuje sloupec původní matice. 
for i, yi in enumerate(y.T):
ax.plot(x, yi, c=cmap(i))

# Přidání barevné stupnice ke grafu s colormapou cmap a značkami na základě hodnot v poli c, která odpovídají barevným hodnotám
fig.colorbar(dummie_cax, ticks=c, ax=ax)
# Zobrazení grafu
plt.show()

gnu code pro ColorPicker s Matplotlib a Tkinterem

 

import cv2 # Importování knihovny OpenCV pro manipulaci s obrázky
import matplotlib.pyplot as plt # Importování knihovny Matplotlib pro vizualizaci dat
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk # Importování nástrojů pro propojení Matplotlibu s Tkinterem
import tkinter as tk # Importování knihovny Tkinter pro tvorbu grafických uživatelských rozhraní


def main():
 <--- ODSAZENÍ PRO  FUNKCI MAIN ---> 
# Vytvoření okna Tkinteru
root = tk.Tk()

# Dialog pro výběr obrázku
filename = tk.filedialog.askopenfilename(
filetypes=(
("Images", (".bmp", ".jpg", ".png")), # Filtrování typů souborů
("All files", "*.*"),
)
)
if not filename: # Pokud uživatel nevybere žádný soubor, ukončíme funkci
return
# Načtení obrázku pomocí OpenCV a konverze barevného prostoru na RGB
image = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)

# Vytvoření instance Matplotlibu pro zobrazení obrázku
fig, ax = plt.subplots()
ax.imshow(image)

# Propojení Matplotlibu s Tkinterem pomocí instance FigureCanvasTkAgg
fig_canvas = FigureCanvasTkAgg(fig, root)
# Získání widgetu Tkinteru pro zobrazení grafu a jeho umístění ve vizuálním rozhraní
# Argumenty:
# - expand=True: Graf se bude roztahovat, aby vyplnil veškerý dostupný prostor
# - fill=tk.BOTH: Graf se bude roztahovat jak horizontálně, tak vertikálně
fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)

# Vytvoření navigační lišty pro interakci s grafem
fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
# Zobrazení navigační lišty v okně Tkinteru
# Argument fill=tk.X znamená, že navigační lišta bude vodorovně vyplněna dostupným prostorem
# tj. bude zabírat celou šířku okna
fig_toolbar.pack(fill=tk.X)

# Vytvoření canvasu pro zobrazení barevného vzorku pixelu
pixel_canvas = tk.Canvas(root, width=100, height=50, background="white")
pixel_canvas.pack() # Zobrazení canvasu v okně Tkinteru

# Vytvoření popisku pro zobrazení hodnot RGB a HLS pixelu
pixel_label = tk.Label(root, text="RGB: ---\nHLS: ---")
pixel_label.pack() # Zobrazení popisku v okně Tkinteru

# Vytvoření tlačítka pro spuštění akce "do stuff"
doit_button = tk.Button(root, text="do stuff")
doit_button.pack() # Zobrazení tlačítka v okně Tkinteru

# Funkce pro výběr barvy pixelu po kliknutí
def pick_color(event):
      if event.button != 1 or event.xdata is None:
            return
      x, y = int(event.xdata), int(event.ydata)
      # Získání hodnot RGB z pixelu v zobrazeném obrázku
      rgb = image[y, x]
      # Konverze na HLS
      hls = cv2.cvtColor(image[y : y + 1, x : x + 1], cv2.COLOR_RGB2HLS)[0, 0]
      # Konverze hodnot RGB na hexadecimální řetězec
      hex_rgb = "#%02X%02X%02X" % tuple(rgb)
      # Konverze hodnot HLS na hexadecimální řetězec
hex_hls = "#%02X%02X%02X" % tuple(hls)
      # Nastavení barvy canvasu na barvu pixelu
pixel_canvas.config(background=hex_rgb)
      # Nastavení textu popisku na hodnoty RGB a HLS
pixel_label.config(text=f"RGB: {hex_rgb}\nHLS: {hex_hls}")

# Funkce pro provedení akce "do stuff"
def do_stuff():
      print("hello")

# Připojení události kliknutí na obrázek k funkci pro výběr barvy pixelu
fig_canvas.mpl_connect("button_press_event", pick_color)
# Připojení události pohybu myší nad obrázkem k funkci pro výběr barvy pixelu
fig_canvas.mpl_connect("motion_notify_event", pick_color)
# Nastavení akce tlačítka "do stuff" na funkci "do_stuff"
doit_button.config(command=do_stuff)

# Spuštění hlavní smyčky Tkinteru pro zobrazení okna
root.mainloop()
 <--- KONEC FUNKCE MAIN ---> 

if __name__ == "__main__":
      main()

 

SHRNUTÍ POSTUPU PRO PŘIPOJENÍ TKINTERU DO MATLABLIB

Pro použití Tkinteru s Matplotlibem a propojení grafického uživatelského rozhraní Tkinter s vizualizací Matplotlib je potřeba splnit několik základních požadavků:

  1. Importování potřebných knihoven: Importujeme knihovny Tkinter a Matplotlib.
    import tkinter as tk
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk

  2. Vytvoření okna Tkinteru: Vytvoříme okno, do kterého budeme umisťovat grafy a další prvky uživatelského rozhraní.
    root = tk.Tk()
  3. Vytvoření instance Matplotlibu pro zobrazení grafu: Vytvoříme graf, který chceme zobrazit v aplikaci.
fig, ax = plt.subplots()
ax.plot(x, y)
 
  1. Propojení Matplotlibu s Tkinterem pomocí FigureCanvasTkAgg: Tímto krokem vytvoříme "plátno" pro zobrazení grafu v okně Tkinteru.
fig_canvas = FigureCanvasTkAgg(fig, root)
čili: 
     # Prop. pomocí instance FigureCanvasTkAgg
 fig_canvas = FigureCanvasTkAgg(fig, root)
     # Zobrazení plátna v okně Tkinteru
  fig_canvas.get_tk_widget().pack(expand=True, fill=tk.BOTH)
  1. Získání widgetu Tkinteru pro zobrazení grafu: Získání widgetu, který obsahuje zobrazený graf a umístění tohoto widgetu ve vizuálním rozhraní.
fig_widget = fig_canvas.get_tk_widget()
fig_widget.pack(expand=True, fill=tk.BOTH)
  1. Vytvoření navigační lišty Matplotlibu (Toolbar): Tato lišta poskytuje uživateli možnost interakce s grafem (např. přiblížení, vybírání oblastí atd.).
fig_toolbar = NavigationToolbar2Tk(fig_canvas, root, pack_toolbar=False)
  1. Zobrazení navigační lišty v okně Tkinteru: Vložení navigační lišty do okna Tkinteru.
fig_toolbar.pack(fill=tk.X)
  1. Vytvoření dalších prvků uživatelského rozhraní: Vytvoření dalších prvků, jako jsou tlačítka, popisky, vstupní pole atd.
pixel_canvas = tk.Canvas(root, width=100, height=50, background="white")
pixel_canvas.pack()

Tímto způsobem vytvoříme aplikaci, která zobrazuje Matplotlib grafy v okně Tkinteru a umožňuje uživatelům interakci s nimi.

CO ZNAMENÁ PROPOJIT INSTANCI FIGURE S INSTANCÍ TK CANVAS

Konkrétně tento řádek provádí následující:

  1. Vytvoření instance FigureCanvasTkAgg: Tento krok vytváří novou instanci třídy FigureCanvasTkAgg, která je zodpovědná za propojení Matplotlib grafu s Tkinterem. Tato instance je inicializována s argumenty fig (Matplotlib figura, která obsahuje všechny vizuální prvky) a root (Tkinterovské okno, do kterého budeme umisťovat graf).

  2. Propojení s Tkinterem:

    Po vytvoření instance FigureCanvasTkAgg je graf automaticky propojen s Tkinterem. To znamená, že všechny změny provedené v grafu pomocí Matplotlibu budou automaticky aktualizovány v Tkinteru a naopak.

  3. Umožnění zobrazení grafu v okně Tkinteru:

    Instance FigureCanvasTkAgg obsahuje widget Tkinteru, který můžeme získat pomocí metody get_tk_widget(). Tento widget je poté zobrazen v okně Tkinteru pomocí metody pack() nebo jiné metody pro umístění widgetu v okně Tkinteru.

GPT: Ramdisk a extrakce .deb

  Následující skript provádí popsané kroky, využívá RAMdisky různých velikostí podle potřeby a provádí extrakci. Tento skript je psán v Bas...

Štítky

.profile adm administrace Adobe AI akcelerace alfa transparence AND any aplikace apt ar archiv asociativní pole atomicity audio autentifikace awk balíčkovací systém bash beacon beacon_hint benchmark Bézierovy křivky bezpečnost biblehub BJT boolean buffer buffering Cache-Conrol Cloudflare code Collector Cut-off ColorManager colorpicker common compare config cookies CPU CPU pipe css CSS3 curl cut čas data loss data lost data transfer reliability datasheet datetime.strptime deb deb-systemd-helper debian debián development dioda diody dpkg dpkg -S dpkg-deb drivers EBO Emitter Cut-off Current eps ETag exclude exec Expires extrakce jediného extrakce názvu balíčku souboru extrakce souboru .deb fflock fflush ffmpeg FIFO file read file write file_get_contents file_get_contents/file_put_contents file_put_contents filter find first_install.sh flock Fly-back dioda font-face fóra fotorezistor fread functions funkce fwrite gate gate drive GDVfs gedit gedit-common geolokace Ghostscript GIO glib gnome gnome settings GNU Privacy Guard gnupg gpg gradient-background grafika grep grep -v groupadd grub grub update gs gsettings gtk gtk.css gtk+ hebrejština history hlavičky HS html html 5 https hudba charakterizace chroot chyba ICES IGBT img sizes img srcset impedance implementace imshow inference inkscape inrush current install jalový výkon javascript javescript jednocení seznamů js kapacita součástek koeficient zesílení komponenty xFce komunikace se serverem konfigurace Krita KSF Last-Modified lazy caching led LEFT JOIN librosa ligatury light-locker lightdm linux list log maják manuál maskování maskování služby masky matplotlib Max-Age measure memory měření MFCC MFCC koeficienty mint Mint 21.3 Mint xFce míry modules moralizace morphologie MOSFET mount moviepy mysql náběhový proud napěťová ochrana návod nel Network Error Logging NLP not Notifications NTFS nth-child oblékání ochrana okruhy přátel OpenVINO IR formát oprava oprava balíčku optočlen org.gnome.desktop.screensaver org.gnome.nm-applet ořezové masky OSHB otázky otázky_jazyky otázky_moralismu_řešení ovladače panely parsování path personifikace photorec php php 4 php 5 php 6 php 7 php 8 phpbb phpBB3 PipeWire pitch PN přechody pnp pole Policykit postscript práva profilování program prune průraz přeinstalování přepěťová ochrana přepolování příkazy připojení k síti připojení k wifi pseudokódd pstoedit PulseAudio PWM regulátory pydub python python3 pytorch ramdisk RBE RDSon read reaktance rectifier regulace vstupního napětí reinstall relyability remount replace restore reverzní geolokace RIGHT JOIN rm role rozvržení disků pro OS linux a data databází řešení samba sdílení sdílení souborů Sec-Fetch-Dest Sec-Fetch-Mode Sec-Fetch-Site Sec-Fetch-User Secure Shell sed Set Cookie show-manual-login show-remote-login shunt schemas schémata schottka skript skupiny sloupce služby song sort soubory soundfile spínané zdroje spínání splines split správa diskových zařízení SQL ssh stabilizace napětí stahování stream string strojové učení stropové učení supplicant svg syntax systemctl systemd-logind T5 tabulky Tangentové úsečky tar témata tepelná ztráta test text-shadow themes thermal runaway time timestamp tkinter tr transistor transition tranzistor tranzistory tuple tvorba otázek TVS ubuntu účiník udiskd udisks unconfined underrun unity-greeter update usermod uživatelé va charakteristika vala vektorová grafika Vgs video Vth vynechání adresářů vývoj while wpa wpa_supplicant wrapovací funkce x xandr xapp-watt xargs -I xed xed-common xfdesktop xml XOR Xorg Xorg Thumbnails xrandr závislosti zdánlivý výkon zdroj zenerka zenerovo napětí zip zip archiv zkratky zpomalení zpracování textu Žalmy