web-dev-qa-db-fra.com

Comment créer des lignes de grille majeures et mineures avec différents styles de ligne dans Python

J'utilise actuellement matplotlib.pyplot pour créer des graphiques et aimerais que les lignes principales de la grille soient noires et solides et que les lignes mineures soient grisées ou en pointillés.

Dans les propriétés de la grille, which=both/major/mine, puis la couleur et le style de trait sont définis simplement par style de trait. Existe-t-il un moyen de spécifier un style de ligne mineur uniquement?

Le code approprié que j'ai jusqu'à présent est

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')
106
Peter Saxton

En fait, c'est aussi simple que de régler major et minor séparément:

In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]

In [10]: yscale('log')

In [11]: grid(b=True, which='major', color='b', linestyle='-')

In [12]: grid(b=True, which='minor', color='r', linestyle='--')

Le problème avec les grilles mineures est qu'il faut aussi activer les graduations mineures. Dans le code ci-dessus, cela est fait par yscale('log'), mais cela peut aussi être fait avec plt.minorticks_on().

enter image description here

154
joaquin

Une façon simple de bricoler serait de faire la grille vous-même:

import matplotlib.pyplot as plt

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

ax.plot([1,2,3], [2,3,4], 'ro')

for xmaj in ax.xaxis.get_majorticklocs():
  ax.axvline(x=xmaj, ls='-')
for xmin in ax.xaxis.get_minorticklocs():
  ax.axvline(x=xmin, ls='--')

for ymaj in ax.yaxis.get_majorticklocs():
  ax.axhline(y=ymaj, ls='-')
for ymin in ax.yaxis.get_minorticklocs():
  ax.axhline(y=ymin, ls='--')
plt.show()
20
ev-br