Як намалювати сітку на ділянці в Python? [зачинено]


170

Я щойно закінчив писати код, щоб зробити сюжет, використовуючи pylab в Python, і тепер я хотів би накласти сітку 10х10 на ділянку розкидання. Як це зробити?

Мій поточний код такий:

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

А його результат:

Без сітки

Мені б хотілося наступного результату:

З сіткою

EDIT: Доданий зразок, заснований на відповіді Андрія Соболєва

Відповіді:


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).
foghorn

57

Щоб показати лінію сітки на кожному галочку, додайте

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.