Pour supprimer le cadre de la figure, j'écris
frameon=False
fonctionne parfaitement avec pyplot.figure
, mais avec matplotlib.Figure
cela ne supprime que le fond gris, le cadre reste. De plus, je veux que les lignes ne soient affichées et que tout le reste de la figure soit transparent.
avec pyplot je peux faire ce que je veux, je veux le faire avec matplotlib pour une longue raison que je préfère ne pas mentionner pour étendre ma question.
python
matplotlib
Emmet B
la source
la source
savefig
? (Si tel est le cas, il remplace ce que vous avez défini lors de l'enregistrement de la figure.) Le réglage manuelfig.patch.set_visible(False)
fonctionne-t-il?Réponses:
Tout d'abord, si vous utilisez
savefig
, sachez que cela remplacera la couleur d'arrière-plan de la figure lors de l'enregistrement, sauf indication contraire (par exemplefig.savefig('blah.png', transparent=True)
).Cependant, pour supprimer l'arrière-plan des axes et de la figure à l'écran, vous devez définir les deux
ax.patch
etfig.patch
être invisible.Par exemple
(Bien sûr, vous ne pouvez pas faire la différence sur le fond blanc de SO, mais tout est transparent ...)
Si vous ne voulez rien afficher d'autre que la ligne, désactivez également l'axe en utilisant
ax.axis('off')
:Dans ce cas, cependant, vous voudrez peut-être que les axes reprennent la figure complète. Si vous spécifiez manuellement l'emplacement des axes, vous pouvez lui dire de prendre la figure complète (vous pouvez également utiliser
subplots_adjust
, mais c'est plus simple pour le cas d'un seul axe).la source
ax.axis('off')
(vous devrez également désactiver le cadre de la figure).ax.set_yticklabels(('G1', 'G2', 'G3'))
print_png()
jette uneTypeError: write() argument must be str, not bytes
exception pour moi sur python 3. L'ouverture du fichier en tant que write binary ('wb'
) est nécessaire pour que cela fonctionne.ax.axis('off')
, comme l'a souligné Joe Kington, supprimera tout sauf la ligne tracée.Pour ceux qui souhaitent uniquement supprimer le cadre (bordure), et conserver les étiquettes, les tickers, etc., on peut le faire en accédant à l'
spines
objet sur l'axe. Étant donné un objet axeax
, les éléments suivants devraient supprimer les bordures des quatre côtés:Et, en cas de suppression
x
et dey
coches de l'intrigue:la source
ax.yaxis.set_ticks_position('left') ax.xaxis.set_ticks_position('bottom')
Le moyen le plus simple de se débarrasser du cadre laid dans les nouvelles versions de matplotlib:
Si vous devez vraiment toujours utiliser l'approche orientée objet, puis faites:
ax.set_frame_on(False)
.la source
ax.set_frame_on(False)
, qui fait la même chose. Peut-être inclure dans la réponse ci-dessus.En vous appuyant sur l'excellente réponse de @ peeol , vous pouvez également supprimer le cadre en faisant
Pour donner un exemple (l'intégralité de l'exemple de code se trouve à la fin de cet article), disons que vous avez un graphique à barres comme celui-ci,
vous pouvez supprimer le cadre avec les commandes ci-dessus, puis conserver les étiquettes
x-
etytick
(tracé non affiché) ou les supprimer également en faisantDans ce cas, on peut alors étiqueter directement les barres; le tracé final pourrait ressembler à ceci (le code peut être trouvé ci-dessous):
Voici tout le code nécessaire pour générer les tracés:
la source
Comme je l'ai répondu ici , vous pouvez supprimer les épines de tous vos tracés via les paramètres de style (feuille de style ou rcParams):
la source
Problème
J'ai eu un problème similaire en utilisant des axes. Le paramètre de classe est
frameon
mais le kwarg l'estframe_on
. axes_api>>> plt.gca().set(frameon=False)
AttributeError: Unknown property frameon
Solution
frame_on
Exemple
la source
J'utilise pour le faire:
la source
Pour supprimer le cadre du graphique
J'espère que cela pourrait fonctionner
la source
la source
devrait faire l'affaire.
la source
plt.savefig a ces options en soi, il suffit de désactiver les axes avant
la source