Hlavní navigace

Názor k článku Tvorba grafů v Jupyter Notebooku s využitím knihovny Matplotlib (dokončení) od anonym - Ten objektový způsob je podle mě bezpečnější a...

  • Článek je starý, nové názory již nelze přidávat.
  • 28. 4. 2020 18:04

    bez přezdívky

    Ten objektový způsob je podle mě bezpečnější a proč se učit 2 způsoby místo jednoho.

    Podle mě to je nutné jakmile člověk potřebuje něco složitějšího - více obrázků v jednom, zakomponovat to do nějakého programu nebo využít např. zmíněný %matplotlib notebook a ipywidgets pro vytvoření jednoduchého klikacího rozhraní v notebooku.
    Příklad takové směsky (podle mě to je náchylné na chyby při různých úpravách):

    plt.figure()
    def add_two_lines(ax):
        ax.plot([1,3], [2, 3])
        plt.plot([1, 3], [2, 2], 'm--')
    
    ax_l = plt.subplot(1, 2, 1)
    plt.plot([1, 2], [1, 2])
    
    ax_r = plt.subplot(1, 2, 2)
    ax_r.plot([1, 2], [1, 2])
    add_two_lines(ax_l) # magentová čára v pravém obrázku?

    Přikreslování do grafu v notebooku - taková "animace" bez tvorby videa:

    import time
    %matplotlib notebook # obvykle umísťuji do samostatné 2. buňky na začátku notebooku (1. buňka importy)
    fig, ax = plt.subplots()
    for i in range(10):
        ax.plot([0, 1], [0, i])
        time.sleep(1)
        fig.canvas.draw()

    Dva obrázky vedle sebe s použitím Dataframe.plot, kterému pošlu objekt os pro vykreslení:

    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(6, 3), sharey=True, tight_layout=True)
    (ax_l, ax_r) = axes
    df = pd.DataFrame({'x': [1, 2, 5], 'y1': [1, 2, 2], 'y2': [2, 3, 5]})
    
    # do levého obrázku
    df.plot('x', 'y1', ax=ax_l, legend=False)
    
    # do pravého obrázku
    df.plot('x', 'y2', ax=ax_r, legend=False)
    
    # do obou obrázku přidáme lineární čáru
    for ax in axes:
        ax.plot([1, 5], [1, 5], 'k--', label='linear')
        ax.legend()
    ax_l.set_ylabel('y')