Jak narysować siatkę na wykresie w Pythonie? [Zamknięte]

170

Właśnie skończyłem pisać kod, aby wykonać wykres przy użyciu pylab w Pythonie, a teraz chciałbym nałożyć siatkę 10x10 na wykres punktowy . W jaki sposób mogę to zrobić?

Mój obecny kod jest następujący:

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

A jego wyjście to:

Bez siatki

Chciałbym otrzymać następujący wynik:

Z siatką

EDYCJA: Dodano przykład na podstawie odpowiedzi Andrieja Sobolewa

LiamNeesonFan
źródło

Odpowiedzi:

219

Chcesz użyć 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.gridi ax.yaxis.gridmoże kontrolować właściwości linii siatki.

Tutaj wprowadź opis obrazu

Andrey Sobolev
źródło
1
Masz jakiś pomysł, dlaczego to tworzy dla mnie fabułę bez siatki?
endolit
Och, myślę, że to matplotlibrcproblem, miałem styl siatki zdefiniowany jako linie ciągłe i to już nie działa?
endolit
1
Właściwie to powinno działać. Przynajmniej u mnie działa - ustawienie mpl.rcParams['grid.linestyle'] = "-"daje wykres z ciągłymi liniami siatki. Jaki jest Twój grid.linestyle?
Andrey Sobolev
To było -. Nie wiem, dlaczego przestało działać. Pewnego dnia zbadam sprawę.
endolith
4
Alternatywnie może lepiej zrobić ax.scatter(x,y)i ax.grid(True).
róg mgłowy
57

Aby wyświetlić linię siatki na każdym zaznaczeniu, dodaj

plt.grid(True)

Na przykład:

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

wprowadź opis obrazu tutaj


Ponadto możesz dostosować stylizację (np. Linia ciągła zamiast linii przerywanej), dodaj:

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

Na przykład:

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

wprowadź opis obrazu tutaj

Jossef Harush
źródło
17

Używając rcParams możesz bardzo łatwo wyświetlić siatkę w następujący sposób

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"

Jeśli siatka nie wyświetla się nawet po zmianie tych parametrów, użyj

plt.grid(True)

zanim zadzwonisz

plt.show()
Ani
źródło
1

Oto mały przykład, jak dodać siatkę matplotlib w Gtk3 z Pythonem 2 (nie działa w Pythonie 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()

wprowadź opis obrazu tutaj

oksydry
źródło