Como faço para desenhar uma grade em uma plotagem em Python? [fechadas]

170

Acabei de escrever o código para fazer um gráfico usando o pylab em Python e agora gostaria de sobrepor uma grade de 10x10 ao gráfico de dispersão. Como faço isso?

Meu código atual é o seguinte:

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

E sua saída é:

Sem grade

O que eu gostaria é a seguinte saída:

Com grade

EDIT: Adicionado um exemplo, com base na resposta de Andrey Sobolev

LiamNeesonFan
fonte

Respostas:

219

Você quer 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.gride ax.yaxis.gridpode controlar as propriedades das linhas de grade.

Digite a descrição da imagem aqui

Andrey Sobolev
fonte
1
Alguma idéia de por que isso está produzindo um enredo sem grade para mim?
endolith
Ah, eu acho que é um matplotlibrcproblema, eu tinha o estilo de grade definido como linhas sólidas e isso não funciona mais?
endolith 26/02
1
Na verdade, deve funcionar. Pelo menos, funciona para mim - a configuração mpl.rcParams['grid.linestyle'] = "-"produz um gráfico com linhas de grade sólidas. Qual é o seu grid.linestyle?
Andrey Sobolev 27/02
Foi -. Não sei por que parou de funcionar. Eu investigarei um dia.
endolith 28/02
4
Alternativamente, pode ser melhor fazer ax.scatter(x,y)e ax.grid(True).
quer
57

Para mostrar uma linha de grade em cada marca, adicione

plt.grid(True)

Por exemplo:

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

insira a descrição da imagem aqui


Além disso, convém personalizar o estilo (por exemplo, linha sólida em vez de linha tracejada), adicione:

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

Por exemplo:

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

insira a descrição da imagem aqui

Jossef Harush
fonte
17

Usando rcParams, você pode mostrar a grade com muita facilidade da seguinte maneira

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"

Se a grade não estiver aparecendo mesmo depois de alterar esses parâmetros, use

plt.grid(True)

antes de ligar

plt.show()
Ani
fonte
1

Aqui está um pequeno exemplo de como adicionar uma grade matplotlib no Gtk3 com o Python 2 (não funcionando no 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()

insira a descrição da imagem aqui

oxidworks
fonte