web-dev-qa-db-fra.com

Définition de `axes.linewidth` sans changer le dict global` rcParams`

Il semble donc que l'on ne puisse pas faire ce qui suit (cela soulève une erreur, car axes n'a pas de set_linewidth méthode):

axes_style = {'linewidth':5}
axes_rect = [0.1, 0.1, 0.9, 0.9]

axes(axes_rect, **axes_style)

et doit utiliser la vieille astuce suivante à la place:

rcParams['axes.linewidth'] = 5 # set the value globally

... # some code

rcdefaults() # restore [global] defaults

Existe-t-il un moyen simple/propre (peut-être que l'on peut définir les paramètres des axes x- et y- individuellement, etc.)?

P.S. Si non, pourquoi?

28
mlvljr

La réponse ci-dessus ne fonctionne pas, comme cela est expliqué dans les commentaires. Je suggère d'utiliser des épines.

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

# you can change each line separately, like:
#ax.spines['right'].set_linewidth(0.5)
# to change all, just write:

for axis in ['top','bottom','left','right']:
  ax.spines[axis].set_linewidth(0.5)

plt.show()
# see more about spines at:
#http://matplotlib.org/api/spines_api.html
#http://matplotlib.org/examples/pylab_examples/multiple_yaxis_with_spines.html
58
Marcos Alex
plt.setp(ax.spines.values(), linewidth=5)
11
kakty3

Oui, il existe un moyen simple et propre de le faire.

L'appel de 'axhline' et 'axvline' à partir d'une instance d'axe semble être la technique approuvée dans la documentation MPL.

Quoi qu'il en soit, il est simple et vous donne un contrôle fin sur l'apparence des axes.

Ainsi, par exemple, ce code créera un tracé et coloriera le vert de l'axe des x et augmentera la largeur de ligne de l'axe des x d'une valeur par défaut de "1" à une valeur de "4"; l'axe y est coloré en rouge et la largeur de ligne de l'axe y est augmentée de "1" à "8".

from matplotlib import pyplot as PLT
fig = PLT.figure()
ax1 = fig.add_subplot(111)

ax1.axhline(linewidth=4, color="g")        # inc. width of x-axis and color it green
ax1.axvline(linewidth=4, color="r")        # inc. width of y-axis and color it red

PLT.show()

La fonction axhline/axvline accepte des arguments supplémentaires qui devraient vous permettre de faire à peu près tout ce que vous voulez esthétiquement, en particulier toutes les propriétés ~ matplotlib.lines.Line2D sont des kwargs valides (par exemple, 'alpha', 'linestyle', capstyle, joinstyle).

5
doug

Si vous créez récursivement des axes (non rectangulaires) à l'aide de pyplot, vous pouvez modifier le paramètre de largeur de ligne pour chaque axe.

Par exemple:

import matplotlib.pyplot as plt

plt.figure(figsize = figsize)
fig, ax = plt.subplots(figsize = figsize)
for shape in sf.shapeRecords():
    x = [i[0] for i in shape.shape.points[:]]
    y = [i[1] for i in shape.shape.points[:]]
    ax.plot(x, y, 'k', linewidth=5)

Pour la documentation, voir documentation MPL.axes (faites défiler jusqu'à "Autres paramètres" -> ** kwargs)

N.B. "Si vous créez plusieurs lignes avec une seule commande de tracé, les kwargs s'appliquent à toutes ces lignes."

Peut-être que cette solution est liée à une question différente posée ailleurs, mais j'ai trouvé cette page à la recherche d'une solution à mon propre problème, alors peut-être qu'elle peut aider les autres à rechercher la même chose.

0
Willem