Làm cách nào để vẽ lưới lên một ô trong Python? [đóng cửa]


170

Tôi vừa hoàn thành việc viết mã để tạo ra một cốt truyện bằng cách sử dụng pylab trong Python và bây giờ tôi muốn đặt một lưới 10 x10 lên trên biểu đồ phân tán. Làm thế nào để làm điều đó?

Mã hiện tại của tôi là như sau:

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

Và đầu ra của nó là:

Không có lưới

Những gì tôi muốn là đầu ra sau đây:

Với lưới điện

EDIT: Đã thêm một ví dụ, dựa trên câu trả lời của Andrey Sobolev

Câu trả lời:


219

Bạn muốn sử dụng 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.gridax.yaxis.gridcó thể kiểm soát các thuộc tính đường lưới.

Nhập mô tả hình ảnh ở đây


1
Bất cứ ý tưởng tại sao điều này đang tạo ra một cốt truyện không có lưới cho tôi?
endolith

Ồ tôi nghĩ đó là một matplotlibrcvấn đề, tôi đã có kiểu lưới được định nghĩa là các đường liền nét và điều đó không còn hoạt động nữa?
endolith

1
Thật ra nó nên hoạt động. Ít nhất, nó hoạt động với tôi - thiết lập mpl.rcParams['grid.linestyle'] = "-"không tạo ra một âm mưu với các đường lưới vững chắc. Bạn là grid.linestyle
Andrey Sobolev

Nó đã được -. Tôi không biết tại sao nó ngừng hoạt động. Tôi sẽ điều tra một ngày nào đó.
endolith

4
Ngoài ra, nó có thể tốt hơn để làm ax.scatter(x,y)ax.grid(True).
Foghorn

57

Để hiển thị một đường lưới trên mỗi đánh dấu, thêm

plt.grid(True)

Ví dụ:

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

nhập mô tả hình ảnh ở đây


Ngoài ra, bạn có thể muốn tùy chỉnh kiểu dáng (ví dụ: đường liền nét thay vì đường đứt nét), thêm:

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

Ví dụ:

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

nhập mô tả hình ảnh ở đây


17

Sử dụng RCParams, bạn có thể hiển thị lưới rất dễ dàng như sau

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"

Nếu lưới không hiển thị ngay cả sau khi thay đổi các tham số này thì hãy sử dụng

plt.grid(True)

trước khi gọi

plt.show()


1

Dưới đây là một ví dụ nhỏ về cách thêm lưới matplotlib trong Gtk3 với Python 2 (không hoạt động trong 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()

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.