2012-02-03 31 views
84

Actualmente estoy usando matplotlib.pyplot para crear gráficos y me gustaría que las principales líneas de la cuadrícula sean sólidas y negras y las secundarias en gris o discontinuas.Cómo crear líneas principales y secundarias con diferentes estilos en Python

En las propiedades de la grilla, which=both/major/mine, y luego el color y el estilo de vida se definen simplemente por linestyle. ¿Hay alguna manera de especificar linestyle menor solo?

El código apropiado que tengo hasta ahora es

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

Respuesta

120

En realidad, es tan simple como la creación de major y minor separado :

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

El gotcha con rejillas menores es que también debe tener marcas secundarias activadas. En el código anterior, esto se hace por yscale('log'), pero también se puede hacer con plt.minorticks_on().

enter image description here

+5

A veces también necesita llamar 'plt.minorticks_on()' para que aparezca realmente la cuadrícula secundaria. Consulte http://stackoverflow.com/a/19940830/209246 – eqzx

+0

de [docs] (https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.grid.html): "Si se suministran kwargs, se supone que desea una cuadrícula yb, por lo tanto, se establece en True ". - por lo que podría omitir 'b = True'. – miku

18

Una forma sencilla de bricolaje sería hacer la cuadrícula de sí mismo:

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() 
+0

Esto funcionó muy bien para mí. –

Cuestiones relacionadas