Come creare griglie principali e secondarie con stili di linea diversi in Python


122

Attualmente sto usando matplotlib.pyplotper creare grafici e vorrei avere le griglie principali solide e nere e quelle minori in grigio o tratteggiate.

Nelle proprietà della griglia which=both/major/mine, e quindi colore e stile di linea sono definiti semplicemente da stile di linea. C'è un modo per specificare solo lo stile di linea minore?

Il codice appropriato che ho finora è

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

Risposte:


174

In realtà, è semplice come impostare majore minorseparatamente:

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='--')

Il problema con le griglie minori è che devi avere anche i segni di graduazione minori attivati. Nel codice precedente questo viene fatto da yscale('log'), ma può anche essere fatto con plt.minorticks_on().

inserisci qui la descrizione dell'immagine


33
A volte è anche necessario richiedere plt.minorticks_on()che la griglia minore appaia effettivamente. Vedere stackoverflow.com/a/19940830/209246
eqzx

2
Dai documenti : "Se vengono forniti kwarg, si presume che si desideri una griglia e b è quindi impostato su True." - quindi potresti omettere b=True.
miku

Ho provato a fare lo stesso con la trama del doppio registro. Sfortunatamente l'asse x mostra solo gli spessori maggiori. È possibile attivare anche gli spessi minori.
Alexander Cska

1
@Alexander è necessario aggiungere axis="both"parametri alla plt.grid()funzione.
Kanmani

Esiste una proprietà rcParam per renderlo lo stile predefinito?
Kanmani

21

Un semplice modo fai-da-te sarebbe creare la griglia da soli:

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()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.