contrôle de taille matplotlib savefig ()
J'ai écrit une fonction qui a eu un dataframe généré à partir de Pandas et de produire une heatmap:
def drawHeatMap(df, city, province, collector, classtype, color, titleposy):
try:
thePlot = pl.matshow(df.values, cmap='PuBuGn')
pl.colorbar(thePlot, orientation='vertical')
aTitle = (classtype + ' Composition Changes Over Time in ' + city +
', ' + province + '\n' + collector + ' collector. ' + 'rs100')
pl.title(aTitle, x=0.5, y=titleposy, style='oblique', weight='bold')
pl.xlabel('Collection Time')
pl.xticks(range(len(df.columns)), df.columns, rotation=90)
pl.yticks(range(len(df.index)), df.index)
fileName = (classtype + '-' + city + '-'
+ province + '-' + collector + '.png')
pl.savefig(fileName)
except ZeroDivisionError:
errorMessage = ('No Data Avaiable for ' + city + ', ' + province +
' with ' + collector + ' collector.')
print errorMessage
Le problème que j'ai est, savefig()
permettrait de sauver des chiffres avec l'axe et des graphiques découpés. J'ai utiliser show()
de maximiser le graphique et les enregistrer manuellement la figure avec le bouton GUI moi-même.
Comment puis-je réparer ma fonction donc savefig()
permettrait de sauver les graphiques correctement? J'ai essayé de mettre une ligne comme ceci avant pl.savefig()
à contrôler ma figure:
pl.figure(figsize=....)
mais je finis par la production de certains vides graphiques. Quelle est la bonne façon d'écrire un matplotlib fonction qui me donne le plein contrôle sur l'enregistrement de la figure?
Mis à jour avec l'Exemple d'un problème de figure:
source d'informationauteur WonderSteve
Vous devez vous connecter pour publier un commentaire.
J'ai ajouté
plt.tight_layout()
avantsavefig()
et il a résolu le parage problème que j'ai eu. Il se peut que le vôtre.EDIT: j'ai aussi mis la figure de la taille au début
rcParams['figure.figsize'] = 40, 12
(vous pouvez définir votre propre largeur et hauteur)De la la documentationvous pouvez ajouter un
dpi
argument pour régler la résolution.Court:
Vous avez juste besoin d'appeler
pl.figure(figsize=...)
avant vous appelez lapl.colorbar
(et tous les autres trucs)Explication:
pl.figure
crée un nouveau figure (taille), sur lequel tous lespl.*
méthodes suivants de la loi sur.Donc
pl.savefig
sauve juste la dernière figure, qui est vide si vous avez créé un nouveau dans le précédent ligne.La commande
pl.figure()
fait un nouveau matplotlib figure. La figure de la taille est définie lors de l'instanciation. Vous ne souhaitez définir la figure de la taille, mais vous avez déjà une figure. Si vous étiez sur la bonne voie, mais essayez plutôt ceci: