Comment dessiner une grille sur un tracé en Python? [fermé]


171

Je viens de terminer d'écrire du code pour créer un tracé en utilisant pylab en Python et maintenant je voudrais superposer une grille de 10x10 sur le nuage de points. Comment je fais ça?

Mon code actuel est le suivant:

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

Et sa sortie est:

Sans grille

Ce que je voudrais, c'est la sortie suivante:

Avec grille

EDIT: Ajout d'un exemple, basé sur la réponse d'Andrey Sobolev

Réponses:


219

Vous souhaitez utiliser 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.gridet ax.yaxis.gridpeut contrôler les propriétés des lignes de quadrillage.

Entrez la description de l'image ici


1
Une idée de la raison pour laquelle cela produit une intrigue sans grille pour moi?
endolith

Oh, je pense que c'est un matplotlibrcproblème, j'avais un style de grille défini comme des lignes pleines et cela ne fonctionne plus?
endolith

1
En fait, cela devrait fonctionner. Au moins, cela fonctionne pour moi - le réglage mpl.rcParams['grid.linestyle'] = "-"produit un tracé avec des lignes de grille pleines. Quel est votre grid.linestyle?
Andrey Sobolev

C'était -. Je ne sais pas pourquoi ça a cessé de fonctionner. J'enquêterai un jour.
endolith

4
Sinon, il pourrait être préférable de faire ax.scatter(x,y)et ax.grid(True).
corne de brume

58

Pour afficher une ligne de quadrillage à chaque graduation, ajoutez

plt.grid(True)

Par exemple:

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

entrez la description de l'image ici


De plus, vous voudrez peut-être personnaliser le style (par exemple, une ligne continue au lieu d'une ligne en pointillés), ajoutez:

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

Par exemple:

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

entrez la description de l'image ici


17

En utilisant rcParams, vous pouvez afficher la grille très facilement comme suit

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 grille ne s'affiche pas même après avoir modifié ces paramètres, utilisez

plt.grid(True)

avant d'appeler

plt.show()


1

Voici un petit exemple comment ajouter une grille matplotlib dans Gtk3 avec Python 2 (ne fonctionne pas dans 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()

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.