matplotlib Zelfstudie
Aan de slag met matplotlib
Zoeken…
Opmerkingen
Overzicht
matplotlib is een plotbibliotheek voor Python. Het biedt objectgeoriënteerde API's voor het inbedden van plots in applicaties. Het is qua capaciteit en syntaxis vergelijkbaar met MATLAB.
Het is oorspronkelijk geschreven door JDHunter en wordt actief ontwikkeld. Het wordt gedistribueerd onder een BSD-Style License.
versies
Versie | Ondersteunde Python-versies | Opmerkingen | Publicatiedatum |
---|---|---|---|
1.3.1 | 2.6, 2.7, 3.x | Oudere stabiele versie | 2013/10/10 |
1.4.3 | 2.6, 2.7, 3.x | Vorige stabiele versie | 2015/07/14 |
1.5.3 | 2.7, 3.x | Huidige stabiele versie | 2016/01/11 |
2.x | 2.7, 3.x | Nieuwste ontwikkelingsversie | 2016/07/25 |
Installatie en instellingen
Er zijn verschillende manieren om matplotlib te installeren, waarvan sommige afhankelijk zijn van het systeem dat u gebruikt. Als je geluk hebt, kun je een pakketbeheerder gebruiken om de matplotlib-module en zijn afhankelijkheden eenvoudig te installeren.
ramen
Op Windows-machines kunt u proberen de pip-pakketbeheerder te gebruiken om matplotlib te installeren. Zie hier voor informatie over het instellen van pip in een Windows-omgeving.
OS X
Het wordt aanbevolen dat u de pip- pakketbeheerder gebruikt om matplotlib te installeren. Als u enkele niet-Python-bibliotheken op uw systeem moet installeren (bijv. libfreetype
), overweeg dan om homebrew te gebruiken .
Als je om welke reden dan ook pip niet kunt gebruiken, probeer dan vanaf de bron te installeren.
Linux
In het ideale geval moet de systeempakketbeheerder of pip worden gebruikt om matplotlib te installeren, hetzij door het python-matplotlib
pakket te pip install matplotlib
of door pip install matplotlib
.
Als dit niet mogelijk is (u hebt bijvoorbeeld geen sudo-rechten op de computer die u gebruikt), kunt u vanaf de bron installeren met de optie --user
: python setup.py install --user
. Doorgaans wordt hiermee matplotlib in ~/.local
geïnstalleerd.
Debian / Ubuntu
sudo apt-get install python-matplotlib
Fedora / rode hoed
sudo yum install python-matplotlib
Probleemoplossen
Zie de matplotlib-website voor advies over het repareren van een kapotte matplotlib.
Een matplotlib-plot aanpassen
import pylab as plt
import numpy as np
plt.style.use('ggplot')
fig = plt.figure(1)
ax = plt.gca()
# make some testing data
x = np.linspace( 0, np.pi, 1000 )
test_f = lambda x: np.sin(x)*3 + np.cos(2*x)
# plot the test data
ax.plot( x, test_f(x) , lw = 2)
# set the axis labels
ax.set_xlabel(r'$x$', fontsize=14, labelpad=10)
ax.set_ylabel(r'$f(x)$', fontsize=14, labelpad=25, rotation=0)
# set axis limits
ax.set_xlim(0,np.pi)
plt.draw()
# Customize the plot
ax.grid(1, ls='--', color='#777777', alpha=0.5, lw=1)
ax.tick_params(labelsize=12, length=0)
ax.set_axis_bgcolor('w')
# add a legend
leg = plt.legend( ['text'], loc=1 )
fr = leg.get_frame()
fr.set_facecolor('w')
fr.set_alpha(.7)
plt.draw()
Gebiedende wijs versus object-georiënteerde syntaxis
Matplotlib ondersteunt zowel objectgeoriënteerde als imperatieve syntaxis voor plotten. De imperatieve syntaxis is opzettelijk ontworpen om zeer dicht bij de syntaxis van Matlab te liggen.
De imperatieve syntaxis (ook wel 'state-machine' syntaxis genoemd) geeft een reeks commando's af die allemaal werken op de meest recente figuur of as (zoals Matlab). De objectgeoriënteerde syntaxis daarentegen werkt expliciet in op de objecten (figuur, as, enz.) Die van belang zijn. Een belangrijk punt in de zen van Python stelt dat expliciet beter is dan impliciet, zodat de objectgeoriënteerde syntaxis meer pythonisch is. De imperatieve syntaxis is echter handig voor nieuwe converters van Matlab en voor het schrijven van kleine "wegwerp" plot-scripts. Hieronder ziet u een voorbeeld van de twee verschillende stijlen.
import matplotlib.pyplot as plt
import numpy as np
t = np.arange(0, 2, 0.01)
y = np.sin(4 * np.pi * t)
# Imperative syntax
plt.figure(1)
plt.clf()
plt.plot(t, y)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude (V)')
plt.title('Sine Wave')
plt.grid(True)
# Object oriented syntax
fig = plt.figure(2)
fig.clf()
ax = fig.add_subplot(1,1,1)
ax.plot(t, y)
ax.set_xlabel('Time (s)')
ax.set_ylabel('Amplitude (V)')
ax.set_title('Sine Wave')
ax.grid(True)
Beide voorbeelden produceren dezelfde plot die hieronder wordt getoond.
Tweedimensionale (2D) arrays
Geef een tweedimensionale (2D) array op de assen weer.
import numpy as np
from matplotlib.pyplot import imshow, show, colorbar
image = np.random.rand(4,4)
imshow(image)
colorbar()
show()