Podstawy biblioteki Matplotlib Krzysztof Gdawiec Instytut Informatyki Uniwersytet Śląski
Matplotlib jest biblioteką Pythona służącą do tworzenia różnego rodzaju wykresów. Biblioteka ta od samego początku miała emulować możliwości Matlaba w Pythonie. Jest napisana całkowicie w Pythonie i korzysta z różnych bibliotek, np. NumPy. Filozofią Matplotlib jest to, że powinniśmy być zdolni stworzyć proste wykresy korzystając z kilku komend lub zaledwie jednej. Wykresy otrzymane za pomocą Matplotlib możemy zapisać w różnych formatach, np. EPS, PDF, SVG, PNG, JPEG.
Głównym składnikiem, z którego będziemy korzystać to interfejs pylab. Dostarcza on nam różnych funkcji do tworzenia wykresów w podobny sposób jak to się robi w Matlabie. 3.00 1 import matplotlib.pyplot as plt 2 3 plt.plot( [3, 1, 2, 1, 3] ) 4 plt.ylabel( "Opis osi Y" ) 5 plt.xlabel( "Opis osi X" ) 6 plt.show() Opis osi Y 2.75 2.50 2.25 2.00 1.75 1.50 1.25 1.00 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 Opis osi X
1 import matplotlib.pyplot as plt 2 3 x = [2, 3, 5, 10, 13] 4 y = [3, 1, 2, 1, 3] 5 6 plt.plot( x, y ) 7 plt.axis( [1, 15, 0, 4] ) 8 plt.ylabel( "Y" ) 9 plt.xlabel( "X" ) 10 plt.show() Y 4.0 3.5 3.0 2.5 2.0 1.5 1.0 0.5 0.0 2 4 6 8 10 12 14 X
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x = np.arange( 0.1, 5, 0.2 ) 5 y1 = np.log( x ) 6 y2 = np.sqrt( x ) 7 y3 = np.exp( x ) 8 9 plt.plot( x, y1, x, y2, x, y3 ) 10 plt.ylabel( "Y" ) 11 plt.xlabel( "X" ) 12 plt.show() 0 1 2 3 4 5 X Y 2 1 0 1 2
Każda para argumentów x, y ma opcjonalny trzeci argument, który odpowiada za kolor i styl linii. Argument ten jest stringiem, w którym pierwsza litera oznacza kolor, a kolejne symbole styl. Dostępne kolory: "b" niebieski, "g" zielony, "r" czerwony, "c" cyjan, "m" magenta, "y" żółty, "k" czarny, "w" biały.
Przykładowe style: " " linia ciągła, " " linia kreskowa, "." linia z kreską i kropką, ":" linia kropkowa, "o" znacznik kółko, "s" znacznik kwadrat, "p" znacznik pięciokąt. Pełną listę stylów można znaleźć w dokumentacji Matplotlib https://matplotlib.org/api/ as gen/matplotlib.pyplot.plot.html
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x = np.arange( 0.1, 5, 0.2 ) 5 y1 = np.log( x ) 6 y2 = np.sqrt( x ) 7 y3 = np.exp( x ) 8 9 plt.plot( x, y1, "r ", x, y2, "bs", x, y3, "g^" ) 10 plt.ylabel( "Y" ) 11 plt.xlabel( "X" ) 12 plt.show() Y 2 1 0 1 2 0 1 2 3 4 5 X
1 # coding: utf 8 2 import matplotlib.pyplot as plt 3 import numpy as np 4 import matplotlib 5 6 matplotlib.rcparams["font.family"] = " Arial" 7 8 x = np.arange( 0.1, 5, 0.2 ) 9 y1 = np.log( x ) 10 y2 = np.sqrt( x ) 11 y3 = np.exp( x ) 12 13 plt.plot( x, y1, "r ", label = "log(x)" ) 14 plt.plot( x, y2, "bs", label = "sqrt(x)" ) 15 plt.plot( x, y3, "g^", label = "exp( x)" ) 16 plt.ylabel( "Y" ) 17 plt.xlabel( "X" ) 18 plt.title( "Przykładowe wykresy" ) 19 plt.legend( loc = "best" ) 20 plt.show()
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x = np.arange( 0.1, 5, 0.2 ) 5 y1 = np.log( x ) 6 y2 = np.sqrt( x ) 7 8 # tworzymy rysunek 1 9 plt.figure( 1 ) 10 11 # tworzymy podwykres 12 plt.subplot( 2, 1, 1 ) 13 plt.plot( x, y1 ) 14 plt.title( "log" ) 15 16 # tworzymy podwykres 17 plt.subplot( 2, 1, 2 ) 18 plt.plot( x, y2 ) 19 plt.title( "sqrt" ) 20 plt.grid( True ) 21 22 plt.show() 1 0 1 2 2.0 1.5 1.0 0.5 log 0 1 2 sqrt 3 4 5 0 1 2 3 4 5 Argumenty w subplot: liczba wierszy (n), liczba kolumn (m), numer wykresu (k {1, 2,..., nm}).
1 import matplotlib.pyplot as plt 2 import numpy as np 3 4 x = np.arange( 0.1, 10, 0.2 ) 5 y1 = np.exp( x ) 6 7 plt.figure( 1 ) 8 9 plt.subplot( 2, 1, 1 ) 10 plt.plot( x, y1 ) 11 plt.title( "Skala liniowa" ) 12 13 plt.subplot( 2, 1, 2 ) 14 plt.plot( x, y1 ) 15 plt.title( "Skala logarytmiczna " ) 16 plt.yscale( "log" ) 17 18 plt.tight_layout( pad = 0.4 ) 19 20 plt.show() Skala liniowa 20000 15000 10000 5000 0 0 2 4 6 8 10 Skala logarytmiczna 10 4 10 3 10 2 10 1 10 0 0 2 4 6 8 10
1 # coding: utf 8 2 import numpy as np 3 import matplotlib.pyplot as plt 4 import matplotlib 5 6 matplotlib.rcparams["font.family"] = "Arial" 7 8 menmeans = (20, 35, 30, 35, 27) 9 menstd = (2, 3, 4, 1, 2) 10 womenmeans = (25, 32, 34, 20, 25) 11 womenstd = (3, 5, 2, 3, 3) 12 13 x = np.arange( len( menmeans ) ) 14 width = 0.35 15 16 plt.bar( x, menmeans, width, color = "r", yerr = menstd, label = "Mężczyzni" ) 17 plt.bar( x + width, womenmeans, width, color = y, yerr = womenstd, label = " Kobiety" ) 18 19 plt.ylabel( "Wynik" ) 20 plt.title( "Wyniki według grup i płci" ) 21 plt.xticks( x + width/2.0, ("G1", "G2", "G3", "G4", "G5") ) 22 plt.legend( loc = "best" ) 23 24 plt.show()
1 # coding: utf 8 2 import numpy as np 3 import matplotlib.pyplot as plt 4 import matplotlib 5 6 matplotlib.rcparams["font.family"] = " Arial" 7 8 bins = 50 # liczba,,kubelkow 9 mu = 100 # srednia 10 sigma = 15 # odchylenie standardowe 11 x = mu + sigma np.random.randn( 10000 ) # dane 12 13 plt.hist( x, bins, density = True, facecolor = green, edgecolor = black ) 14 15 plt.xlabel( "X" ) 16 plt.ylabel( "Prawdopodobieństwo" ) 17 plt.title( r"dane o rozkładzie: $\mu = 100$, $\sigma = 15$" ) 18 19 plt.show() = 100 = 15
1 import matplotlib.pyplot as plt 2 3 labels = ["Frogs", "Hogs", " Dogs", "Logs"] 4 sizes = [15, 30, 45, 10] 5 colors = ["yellowgreen", "gold", "lightskyblue", " lightcoral"] 6 explode = (0, 0.1, 0, 0) # tylko 2 wycienek zostanie odsuniety 7 8 plt.pie( sizes, explode = explode, labels = labels, colors = colors, autopct = "%1.1f%%", shadow = True ) 9 10 plt.axis( "equal" ) 11 12 plt.show() Hogs 30.0% 45.0% Dogs 15.0% 10.0% Frogs Logs
90 1 import numpy as np 2 import matplotlib.pyplot as plt 135 45 3 4 r = np.arange( 0, 3.0, 0.01 ) 5 theta = 2.0 np.pi r 6 7 plt.polar( theta, r ) 8 9 plt.show() 180 225 2.5 3.0 2.0 1.5 1.0 0.5 315 0 270
1 import numpy as np 2 import matplotlib.pyplot as plt 3 4 def f(x,y): 5 return (1 x / 2 + x 5 + y 3) np.exp( x 2 y 2) 6 7 n = 10 8 x = np.linspace( 3, 3, 4 n ) 9 y = np.linspace( 3, 3, 4 n ) 10 X, Y = np.meshgrid( x, y ) 11 12 plt.imshow( f(x, Y), cmap = " jet" ) 13 plt.colorbar() 14 15 plt.xticks( [] ) 16 plt.yticks( [] ) 17 18 plt.show() 1.0 0.8 0.6 0.4 0.2 0.0 0.2 0.4 0.6