¿Cómo dibujo una cuadrícula en una parcela en Python? [cerrado]

171

Acabo de terminar de escribir código para hacer un diagrama usando pylab en Python y ahora me gustaría superponer una cuadrícula de 10x10 en el diagrama de dispersión. ¿Cómo puedo hacer eso?

Mi código actual es el siguiente:

x = numpy.arange(0, 1, 0.05)
y = numpy.power(x, 2)

fig = plt.figure()
ax = fig.gca()
ax.set_xticks(numpy.arange(0, 1, 0.1))
ax.set_yticks(numpy.arange(0, 1., 0.1))
plt.scatter(x, y)
plt.show()

Y su salida es:

Sin rejilla

Lo que me gustaría es el siguiente resultado:

Con rejilla

EDITAR: se agregó un ejemplo, basado en la respuesta de Andrey Sobolev

LiamNeesonFan
fuente

Respuestas:

219

Quieres usar pyplot.grid:

x = numpy.arange(0, 1, 0.05)
y = numpy.power(x, 2)

fig = plt.figure()
ax = fig.gca()
ax.set_xticks(numpy.arange(0, 1, 0.1))
ax.set_yticks(numpy.arange(0, 1., 0.1))
plt.scatter(x, y)
plt.grid()
plt.show()

ax.xaxis.gridy ax.yaxis.gridpuede controlar las propiedades de las líneas de cuadrícula.

Ingrese la descripción de la imagen aquí

Andrey Sobolev
fuente
1
¿Alguna idea de por qué esto está produciendo una trama sin cuadrícula para mí?
endolito
Oh, creo que es un matplotlibrcproblema, tenía el estilo de cuadrícula definido como líneas continuas y eso ya no funciona.
endolito
1
En realidad debería funcionar. Al menos, funciona para mí: la configuración mpl.rcParams['grid.linestyle'] = "-"produce un gráfico con líneas de cuadrícula sólidas. ¿Cuál es tu grid.linestyle?
Andrey Sobolev
Fue -. No sé por qué dejó de funcionar. Investigaré algún día.
endolito
44
Alternativamente, podría ser mejor hacer ax.scatter(x,y)y ax.grid(True).
foghorn
58

Para mostrar una línea de cuadrícula en cada marca, agregue

plt.grid(True)

Por ejemplo:

import matplotlib.pyplot as plt

points = [
    (0, 10),
    (10, 20),
    (20, 40),
    (60, 100),
]

x = list(map(lambda x: x[0], points))
y = list(map(lambda x: x[1], points))

plt.scatter(x, y)
plt.grid(True)

plt.show()

ingrese la descripción de la imagen aquí


Además, es posible que desee personalizar el estilo (por ejemplo, línea continua en lugar de línea discontinua), agregue:

plt.rc('grid', linestyle="-", color='black')

Por ejemplo:

import matplotlib.pyplot as plt

points = [
    (0, 10),
    (10, 20),
    (20, 40),
    (60, 100),
]

x = list(map(lambda x: x[0], points))
y = list(map(lambda x: x[1], points))

plt.rc('grid', linestyle="-", color='black')
plt.scatter(x, y)
plt.grid(True)

plt.show()

ingrese la descripción de la imagen aquí

Jossef Harush
fuente
17

Usando rcParams puede mostrar la cuadrícula muy fácilmente como sigue

plt.rcParams['axes.facecolor'] = 'white'
plt.rcParams['axes.edgecolor'] = 'white'
plt.rcParams['axes.grid'] = True
plt.rcParams['grid.alpha'] = 1
plt.rcParams['grid.color'] = "#cccccc"

Si la cuadrícula no se muestra incluso después de cambiar estos parámetros, use

plt.grid(True)

antes de llamar

plt.show()
Y yo
fuente
1

Aquí hay un pequeño ejemplo de cómo agregar una cuadrícula matplotlib en Gtk3 con Python 2 (no funciona en Python 3):

#!/usr/bin/env python
#-*- coding: utf-8 -*-

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
from matplotlib.figure import Figure
from matplotlib.backends.backend_gtk3agg import FigureCanvasGTK3Agg as FigureCanvas

win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
win.set_title("Embedding in GTK3")

f = Figure(figsize=(1, 1), dpi=100)
ax = f.add_subplot(111)
ax.grid()

canvas = FigureCanvas(f)
canvas.set_size_request(400, 400)
win.add(canvas)

win.show_all()
Gtk.main()

ingrese la descripción de la imagen aquí

oxidworks
fuente