Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

Dažas alternatīvas

  • Matplotlib - populārs, bet ne vienīgais
  • Bokeh
  • Datashader (īpaši liels datu apjoms; vizualizācijas)
  • Holoviews (anotācijas datiem, to vieglākai vizualizācijai)
  • Seaborn
  • Plotnine (diagrammu gramatika - līdzīgi ggplot2)

50 vizualizācijas

Minimāla matplotlib diagramma

Diagramma ar taisni
Diagramma ar taisni

Matplotlib kļūdas

Troubleshooting guide

3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0]
mpl_graphs.__version__ = 3.1.1
mpl_graphs.__file__ = ... ... /matplotlib/__init__.py

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

Izkliedes diagrammas

Scatter plot
Scatter plot

Reālistiska izkliedes diagramma

Scatter multicolor
Scatter multicolor

Funkciju grafiku kombinēšana

Subplots
Subplots

Izkliedes diagramma ar kļūdām

Scatter Dots with Errors
Scatter Dots with Errors

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

Vienkāršas joslas

Pārrakstīts ar pilniem “vārdapgabaliem” (namespaces):

Bars hlines
Bars hlines

Vienkārša histogramma


import matplotlib.pyplot as plt 
import numpy as np

x = np.random.normal(2, 0.5, 100000)
plt.hist(x, bins=50)
plt.savefig('bars_histogram_plain.png')

plt.show()
Histogram plain
Histogram plain

Smukāka histogramma

Histogram separated
Histogram separated

Joslas/stabiņi ar kļūdām

Bars with errors
Bars with errors

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

Anotācijas - dažādas

from matplotlib.pyplot import figure, show, savefig
from matplotlib.patches import Ellipse
import numpy as np

fig = figure(1,figsize=(8,5))
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-1,5), ylim=(-4,3))

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=3, color='purple')

ax.annotate('arrowstyle', xy=(0, 1),  xycoords='data',
            xytext=(-50, 30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->")
            )

ax.annotate('arc3', xy=(0.5, -1),  xycoords='data',
            xytext=(-30, -30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc3,rad=.2")
            )

ax.annotate('arc', xy=(1., 1),  xycoords='data',
            xytext=(-40, 30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc,angleA=0,armA=30,rad=10"),
            )

ax.annotate('arc', xy=(1.5, -1),  xycoords='data',
            xytext=(-40, -30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="arc,angleA=0,armA=20,angleB=-90,armB=15,rad=7"),
            )

ax.annotate('angle', xy=(2., 1),  xycoords='data',
            xytext=(-50, 30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="angle,angleA=0,angleB=90,rad=10"),
            )

ax.annotate('angle3', xy=(2.5, -1),  xycoords='data',
            xytext=(-50, -30), textcoords='offset points',
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="angle3,angleA=0,angleB=-90"),
            )


ax.annotate('angle', xy=(3., 1),  xycoords='data',
            xytext=(-50, 30), textcoords='offset points',
            bbox=dict(boxstyle="round", fc="0.8"),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="angle,angleA=0,angleB=90,rad=10"),
            )

ax.annotate('angle', xy=(3.5, -1),  xycoords='data',
            xytext=(-70, -60), textcoords='offset points',
            size=20,
            bbox=dict(boxstyle="round4,pad=.5", fc="0.8"),
            arrowprops=dict(arrowstyle="->",
                            connectionstyle="angle,angleA=0,angleB=-90,rad=10"),
            )

ax.annotate('angle', xy=(4., 1),  xycoords='data',
            xytext=(-50, 30), textcoords='offset points',
            bbox=dict(boxstyle="round", fc="0.8"),
            arrowprops=dict(arrowstyle="->",
                            shrinkA=0, shrinkB=10,
                            connectionstyle="angle,angleA=0,angleB=90,rad=10"),
            )


ann = ax.annotate('', xy=(4., 1.),  xycoords='data',
            xytext=(4.5, -1), textcoords='data',
            arrowprops=dict(arrowstyle="<->",
                            connectionstyle="bar",
                            ec="k",
                            shrinkA=5, shrinkB=5,
                            )
            )

savefig('annotations_all.png')
show()

Iegūtais attēls

Attēls ar dažādām anotācijām
Attēls ar dažādām anotācijām

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

Aplīšu diagramma

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

3D parametriska līkne

3D parametric curve
3D parametric curve

3D virsma

3D Sphere
3D Sphere

 

Matplotlib ievads

Python vizualizāciju bibliotēka

(1) Valoda un vide
(2) Datu punkti
(3) Joslas, histogrammas
(4) Anotēšana, eksplikācijas
(5) Aplīšu izmērs, krāsa
(6) 3D diagrammas
(7) MP4 video

MP4 example

Embedded video?