Taille de la figure ( figsize
) détermine la taille de la figure en pouces. Cela donne l'espace dont disposent les axes (et les autres éléments) à l'intérieur de la figure. La taille par défaut de la figure est (6.4, 4.8)
Une taille de figure plus grande permet d'afficher des textes plus longs, plus d'axes ou plus d'étiquettes à cocher.
Points par pouce (ppp) détermine le nombre de pixels que comporte la figure. Le dpi par défaut dans matplotlib est de 100. Une figure de figsize=(w,h)
aura
px, py = w*dpi, h*dpi # pixels
# e.g.
# 6.4 inches * 100 dpi = 640 pixels
Ainsi, pour obtenir une figure avec une taille de pixel de par ex. (1200,600)
vous pouvez choisir plusieurs combinaisons de taille de figure et de ppp, par exemple
figsize=(15,7.5), dpi= 80
figsize=(12,6) , dpi=100
figsize=( 8,4) , dpi=150
figsize=( 6,3) , dpi=200
etc.
Maintenant, quelle est la différence ? Elle est déterminée par la taille des éléments à l'intérieur de la figure. La plupart des éléments comme les lignes, les marqueurs, les textes ont une taille donnée en points.
Les figures de Matplotlib utilisent Points par pouce (ppi) de 72. Une ligne d'une épaisseur de 1 point aura une largeur de 1./72. inch. Un texte avec une taille de police de 12 points aura une hauteur de 12./72. pouces.
Bien sûr, si vous changez la taille de la figure en pouces, les points ne changeront pas, donc une figure plus grande en pouces a toujours la même taille d'éléments. Changer la taille de la figure revient donc à prendre une feuille de papier d'une taille différente. Bien entendu, cela ne modifierait pas la largeur de la ligne tracée avec le même stylo.
En revanche, la modification des ppp met ces éléments à l'échelle. À 72 ppp, une ligne de 1 point est forte d'un pixel. À 144 dpi, cette ligne a une force de 2 pixels. Un ppp plus grand agira donc comme une loupe. Tous les éléments sont mis à l'échelle par le pouvoir grossissant de la lentille.
Une comparaison pour une taille de figure constante et des ppp variables est présentée dans l'image ci-dessous à gauche. Sur la droite, vous voyez un dpi constant et une taille de figure variable. Les figures de chaque rangée ont la même taille de pixel.
Code à reproduire :
import matplotlib.pyplot as plt
%matplotlib inline
def plot(fs,dpi):
fig, ax=plt.subplots(figsize=fs, dpi=dpi)
ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi))
ax.plot([2,4,1,5], label="Label")
ax.legend()
figsize=(2,2)
for i in range(1,4):
plot(figsize, i*72)
dpi=72
for i in [2,4,6]:
plot((i,i), dpi)
2 votes
Je ne comprends pas bien le problème. Mais ce que je peux dire, c'est que lorsque les deux, la taille du chiffre en pouces y dpi, devrait être fixe, vous devez modifier la taille des objets que vous percevez comme "trop grands", c'est-à-dire réduire la taille des polices, la largeur des lignes, les signets, etc. En général, il suffit de fixer les ppp o la taille en pouces pour obtenir la silhouette souhaitée.
0 votes
@ImportanceOfBeingErnest J'ai créé une image qui s'est avérée avoir les dimensions souhaitées et la taille du fichier est dans la fourchette souhaitée. Cependant, le graphique dessiné s'est avéré être trop agrandi/réduit. En lisant d'autres fils de discussion, il semble qu'il y ait un problème d'échelle et de rapport d'aspect qui pourrait être en jeu. Votre suggestion de déclarer la taille de chaque élément semble plutôt inhabituelle, car je pense qu'il devrait y avoir un moyen d'ajuster automatiquement tous les éléments du canevas en fonction des paramètres précédemment définis de figsize() et de dpi.
0 votes
Permettez-moi de réessayer : Si, par exemple, la dimension du pixel est de
1200 X 600
vous créez généralement une figure de taille(12 x 6)
pouces et 100 dpi, auquel cas les lignes sont probablement de taille adéquate. En revanche, avec une résolution de 400 ppp, chaque point de la figure est quatre fois plus grand. Apparemment, ce n'est pas ce que vous voulez. Mais si vous en avez besoin, vous pouvez réduire la taille des éléments (par exemple, faire en sorte que la ligne soit de 0,25 au lieu de 1). (Il n'y a pas de problème d'échelle ou d'aspect ici, c'est tout simplement la façon dont cela fonctionne et comme prévu).0 votes
En regardant le commentaire que vous mentionnez, il s'agit de quelque chose de complètement différent ; il vous dit que vous n'obtenez pas un axe carré, même si vous utilisez une figure carrée. Cela n'a rien à voir avec votre problème ici.
0 votes
Je pense avoir compris votre point de vue. Ma compréhension de la relation entre dpi et figsize(x,y) était légèrement différente de ce que vous avez expliqué. Sur la base de votre commentaire, j'ai testé votre suggestion et elle semble prometteuse. Je devrais peut-être changer le titre de la question...
0 votes
Cette question pourrait vous intéresser ici. Pourtant, je ne suis pas sûr de la réponse à cette question ici. Ou bien est-elle déjà résolue ?
0 votes
En effet, il est préférable d'avoir un nombre de ppp inférieur et d'augmenter la valeur des dimensions de la figure. Ce qui n'était pas clair pour moi dans la documentation est la relation entre les paramètres dpi et figsize(x, y) et la résolution résultante.