Как нарисовать сетку на графике в Python? [закрыто]

171

Я только что закончил писать код для построения графика, используя pylab в Python, и теперь я хотел бы наложить сетку 10x10 на точечный график. Как я могу это сделать?

Мой текущий код следующий:

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

И его вывод:

Без сетки

Я хотел бы получить следующий вывод:

С сеткой

РЕДАКТИРОВАТЬ: Добавлен пример, основанный на ответе Андрея Соболева

LiamNeesonFan
источник

Ответы:

219

Вы хотите использовать 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.gridи ax.yaxis.gridможет контролировать свойства линий сетки.

Введите описание изображения здесь

Андрей Соболев
источник
1
Любая идея, почему это производит сюжет без сетки для меня?
эндолит
О, я думаю, это matplotlibrcпроблема, стиль сетки определен как сплошные линии, и это больше не работает?
эндолит
1
На самом деле это должно работать. По крайней мере, это работает для меня - настройка mpl.rcParams['grid.linestyle'] = "-"действительно создает график со сплошными линиями сетки. Какой твой grid.linestyle?
Андрей Соболев
Это было -. Я не знаю, почему это перестало работать. Я буду расследовать когда-нибудь.
Эндолит
4
В качестве альтернативы может быть лучше сделать ax.scatter(x,y)и ax.grid(True).
Фогхорн
58

Чтобы показать линию сетки на каждом тике, добавьте

plt.grid(True)

Например:

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

введите описание изображения здесь


Кроме того, вы можете настроить стиль (например, сплошная линия вместо пунктирной линии), добавьте:

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

Например:

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

введите описание изображения здесь

Йосеф Харуш
источник
17

Используя rcParams, вы можете очень легко отобразить сетку следующим образом

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"

Если сетка не отображается даже после изменения этих параметров, используйте

plt.grid(True)

перед звонком

plt.show()
Ани
источник
1

Вот небольшой пример, как добавить сетку matplotlib в Gtk3 с Python 2 (не работает в 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()

введите описание изображения здесь

oxidworks
источник