J'ai écrit un code qui ouvre 16 chiffres à la fois. Actuellement, ils s’ouvrent tous sous forme de graphiques distincts. Je voudrais qu'ils ouvrent tous sur la même page. Pas le même graphique. Je veux 16 graphiques séparés sur une seule page/fenêtre. De plus, pour une raison quelconque, le format des nombres numbins et defaultreallimits ne dépasse pas le chiffre 1. Dois-je utiliser la commande sous-parcelle? Je ne comprends pas pourquoi je devrais le faire mais je n'arrive pas à comprendre ce que je ferais d'autre?
import csv
import scipy.stats
import numpy
import matplotlib.pyplot as plt
for i in range(16):
plt.figure(i)
filename= easygui.fileopenbox(msg='Pdf distance 90m contour', title='select file', filetypes=['*.csv'], default='X:\\herring_schools\\')
alt_file=open(filename)
a=[]
for row in csv.DictReader(alt_file):
a.append(row['Dist_90m(nmi)'])
y= numpy.array(a, float)
relpdf=scipy.stats.relfreq(y, numbins=7, defaultreallimits=(-10,60))
bins = numpy.arange(-10,60,10)
print numpy.sum(relpdf[0])
print bins
patches=plt.bar(bins,relpdf[0], width=10, facecolor='black')
titlename= easygui.enterbox(msg='write graph title', title='', default='', strip=True, image=None, root=None)
plt.title(titlename)
plt.ylabel('Probability Density Function')
plt.xlabel('Distance from 90m Contour Line(nm)')
plt.ylim([0,1])
plt.show()
Pour répondre à votre question principale, vous souhaitez utiliser la commande sous-parcelle . Je pense que changer plt.figure(i)
en plt.subplot(4,4,i+1)
devrait fonctionner.
La réponse de las3rjock, qui est en quelque sorte la réponse acceptée par l'OP, est incorrecte. Le code ne s'exécute pas et la syntaxe matplotlib n'est pas valide. cette réponse ne fournit aucun code exécutable et ne contient aucune information ou suggestion que le PO pourrait trouver utile pour écrire son propre code afin de résoudre le problème dans le PO.
Étant donné que c'est la réponse acceptée et a déjà reçu plusieurs votes positifs, je suppose qu'un peu de déconstruction est en ordre.
Tout d’abord, appeler sous-parcelle fait pas vous donne plusieurs tracés; ---- [subplot] est appelé pour créer un seul tracé, ainsi que pour créer plusieurs tracés. De plus, "changer de plt.figure (i)" n’est pas correct.
plt.figure () (dans lequel plt ou PLT est généralement la bibliothèque pyplot library de matplotlib importée et rebondie sous forme de variable globale, plt ou parfois PLT, comme suit:
from matplotlib import pyplot as PLT
fig = PLT.figure()
la ligne juste au-dessus crée une instance de figure matplotlib; La méthode add_subplot de cet objet est ensuite appelée pour chaque fenêtre de traçage (imaginons de manière informelle un axe x & y comprenant une seule sous-parcelle). Vous créez (que ce soit un ou plusieurs sur une page), comme si
fig.add_subplot(111)
cette syntaxe est équivalente à
fig.add_subplot(1,1,1)
choisissez celui qui a du sens pour vous.
Ci-dessous, j'ai énuméré le code pour tracer deux parcelles sur une page, l'une au-dessus de l'autre. Le formatage est effectué via l'argument passé à add_subplot. Notez que l’argument est (211) pour le premier tracé et (212) pour le second .
from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(211)
ax1.plot([(1, 2), (3, 4)], [(4, 3), (2, 3)])
ax2 = fig.add_subplot(212)
ax2.plot([(7, 2), (5, 3)], [(1, 6), (9, 5)])
PLT.show()
Chacun de ces deux arguments est une spécification complète permettant de placer correctement les fenêtres de tracé respectives sur la page.
211 (qui, là encore, pourrait également être écrit sous forme de 3-Tuple comme suit (2,1,1) signifie deux lignes et - ne colonne des fenêtres de tracé, le troisième chiffre spécifie l'ordre de cette fenêtre de sous-parcelle par rapport aux autres fenêtres de sous-parcelle - dans ce cas, il s'agit du premier tracé (qui le place sur la ligne 1). numéro 1, rangée 1 col 1.
L'argument passé au second appel à add_subplot ne diffère du premier que par le dernier chiffre (un 2 au lieu d'un 1, car ce tracé est le second tracé (rangée 2, colonne 1) .
Un exemple avec plusieurs tracés: si vous vouliez plutôt quatre tracés sur une page, dans une configuration de matrice 2x2, vous appeleriez la méthode add_subplot quatre fois, en passant ces quatre arguments (221), (222) , (223) et (224), pour créer quatre tracés sur une page à 10, 2, 8 et 4 heures, respectivement et dans cet ordre.
Notez que chacun des quatre arguments contient deux majuscules 2 - qui codent la configuration 2 x 2, c'est-à-dire deux lignes et deux colonnes.
Le troisième chiffre (le plus à droite) dans chacun des quatre arguments code l’ordre de cette fenêtre de tracé dans la matrice 2 x 2 - c’est-à-dire, rangée 1 col 1 (1), rangée 1 col 2 (2), rangée 2 col 1 (3), rangée 2 col 2 (4).
Depuis que cette question remonte à 4 ans, de nouvelles choses ont été implémentées et parmi elles il y a un nouvelle fonction plt.subplots
qui est très pratique :
fig, axes = plot.subplots(nrows=2, ncols=3, sharex=True, sharey=True)
où axes
est un numpy.ndarray
des objets AxesSubplot, ce qui est très pratique pour parcourir les différentes sous-graphes en utilisant simplement les index de tableau [i,j]
.
Cela fonctionne aussi:
for i in range(19):
plt.subplot(5,4,i+1)
Il trace 19 graphiques au total sur une page. Le format est 5 bas et 4 à travers ..
Les réponses de @doug & FS. sont de très bonnes solutions. Je souhaite partager la solution d'itération sur pandas.dataframe.
import pandas as pd
df=pd.DataFrame([[1, 2], [3, 4], [4, 3], [2, 3]])
fig = plt.figure(figsize=(14,8))
for i in df.columns:
ax=plt.subplot(2,1,i+1)
df[[i]].plot(ax=ax)
print(i)
plt.show()