Wie zeichne ich in Python ein Raster auf ein Diagramm? [geschlossen]

170

Ich habe gerade den Code für das Erstellen eines Diagramms mit Pylab in Python fertiggestellt und möchte nun ein Streuungsdiagramm von 10 x 10 überlagern. Wie mache ich das?

Mein aktueller Code lautet wie folgt:

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

Und seine Ausgabe ist:

Ohne Gitter

Was ich möchte, ist die folgende Ausgabe:

Mit Gitter

EDIT: Es wurde ein Beispiel hinzugefügt, das auf der Antwort von Andrey Sobolev basiert

LiamNeesonFan
quelle

Antworten:

219

Sie möchten verwenden 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.gridund ax.yaxis.gridkann die Eigenschaften von Gitterlinien steuern.

Geben Sie hier die Bildbeschreibung ein

Andrey Sobolev
quelle
1
Irgendeine Idee, warum dies für mich ein Grundstück ohne Raster erzeugt?
Endolith
Oh, ich denke, es ist ein matplotlibrcProblem. Ich hatte einen Gitterstil als durchgezogene Linien definiert und das funktioniert nicht mehr.
Endolith
1
Eigentlich sollte es funktionieren. Zumindest funktioniert es bei mir - die Einstellung mpl.rcParams['grid.linestyle'] = "-"erzeugt ein Diagramm mit durchgezogenen Gitterlinien. Was ist Ihr grid.linestyle?
Andrey Sobolev
Es war -. Ich weiß nicht, warum es nicht mehr funktioniert. Ich werde eines Tages nachforschen.
Endolith
4
Alternativ könnte es besser sein ax.scatter(x,y)und ax.grid(True).
Nebelhorn
57

Fügen Sie hinzu, um bei jedem Häkchen eine Gitterlinie anzuzeigen

plt.grid(True)

Beispielsweise:

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

Geben Sie hier die Bildbeschreibung ein


Darüber hinaus möchten Sie möglicherweise das Styling anpassen (z. B. durchgezogene Linie anstelle der gestrichelten Linie). Fügen Sie Folgendes hinzu:

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

Beispielsweise:

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

Geben Sie hier die Bildbeschreibung ein

Jossef Harush
quelle
17

Mit rcParams können Sie das Raster sehr einfach wie folgt anzeigen

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"

Wenn das Raster auch nach Änderung dieser Parameter nicht angezeigt wird, verwenden Sie

plt.grid(True)

vor dem Anruf

plt.show()
Ani
quelle
1

Hier ist ein kleines Beispiel, wie Sie ein Matplotlib-Raster in Gtk3 mit Python 2 hinzufügen (funktioniert nicht in 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()

Geben Sie hier die Bildbeschreibung ein

Oxidworks
quelle