Bắt các đường lưới dọc xuất hiện trong biểu đồ đường trong matplotlib


93

Tôi muốn lấy cả đường lưới ngang và dọc trên lô đất của mình nhưng chỉ các đường lưới ngang xuất hiện theo mặc định. Tôi đang sử dụng pandas.DataFrametruy vấn từ sql trong python để tạo một biểu đồ dòng có ngày tháng trên trục x. Tôi không chắc tại sao chúng không xuất hiện vào ngày tháng và tôi đã cố gắng tìm kiếm câu trả lời cho điều này nhưng không thể tìm thấy.

Tất cả những gì tôi đã sử dụng để vẽ biểu đồ là đoạn mã đơn giản bên dưới.

data.plot()
grid('on')

dữ liệu là DataFrame chứa ngày tháng và dữ liệu từ truy vấn sql.

Tôi cũng đã thử thêm mã bên dưới nhưng tôi vẫn nhận được cùng một đầu ra mà không có đường lưới dọc.

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

Bất kỳ đề xuất?

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


data.plot(grid="on")làm việc cho tôi
Markus

Câu trả lời:


102

Bạn có thể cần cung cấp đối số boolean trong các cuộc gọi của mình, ví dụ: sử dụng ax.yaxis.grid(True)thay vì ax.yaxis.grid(). Ngoài ra, vì bạn đang sử dụng cả hai, bạn có thể kết hợp thành ax.grid, hoạt động trên cả hai, thay vì thực hiện một lần cho mỗi thứ nguyên.

ax = plt.gca()
ax.grid(True)

Điều đó sẽ giúp bạn loại bỏ.


Tôi đã thử nó nhưng đối với một số lý do nó vẫn có vẻ giống như trước
Osmond Giám Mục

1
Bạn có đang làm điều này trong trình thông dịch tương tác không? Đảm bảo rằng bạn đang thiết lập lưới trước khi gọiplt.show()
wim

Tôi đang sử dụng iPython. Tôi đã thử thêm plt.show () nó sẽ không tạo ra sự khác biệt.
Osmond Bishop

1
Chà, điều này thật kỳ quặc. Phiên bản ipython của bạn là gì, hãy thử chạy nó như thế nào ipython --pylabvà làm plt.grid(True)ngay lập tức - bạn có thấy lưới không?
wim

Tôi đã thử plt.grid(True)và nhận được biểu đồ trống với cả đường lưới dọc và ngang, vì vậy, có một điều kỳ lạ là tại sao tôi không thể nhận được điều này cho biểu đồ đường của mình. Tôi đang chạy phiên bản iPython mới nhất hiện có.
Osmond Bishop

57

plt.gca().xaxis.grid(True) được chứng minh là giải pháp cho tôi


6
Tôi myaxes.grid(which='x')không hoạt động với matplotlib phiên bản 1.4.2 ... không thể làm cho whichtừ khóa hoạt động được. Tuy nhiên, myaxes.xaxis.grid(True)đã làm thủ thuật và IMO tốt hơn về mặt khái niệm. Ồ, và đừng quên về myaxes.set_axisbelow(True)phương pháp hữu ích để đặt lưới phía sau dữ liệu.
travc

25

Theo tài liệu matplotlib , Chữ ký của phương thức Axeslớp grid()như sau:

Axes.grid (b = None, which = 'major', axis = 'both', ** kwargs)
Bật hoặc tắt lưới trục.

which có thể là 'chính' (mặc định), 'nhỏ' hoặc 'cả hai' để kiểm soát xem lưới đánh dấu chính, lưới đánh dấu nhỏ hoặc cả hai đều bị ảnh hưởng.

axis có thể là 'cả hai' (mặc định), 'x' hoặc 'y' để kiểm soát tập hợp đường lưới nào được vẽ.

Vì vậy, để hiển thị các đường lưới cho cả trục x và trục y, chúng ta có thể sử dụng đoạn mã sau:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

Phương pháp này cho phép chúng tôi kiểm soát tốt hơn những gì sẽ hiển thị cho các đường lưới.


6

có thể điều này có thể giải quyết vấn đề: matplotlib, xác định kích thước của lưới trên một ô

ax.grid(True, which='both')

Sự thật là lưới điện đang hoạt động, nhưng chỉ có một lưới điện v vào 00:00 và không có lưới điện nào ở những nơi khác. Tôi gặp vấn đề tương tự là chỉ có một lưới vào ngày 1 tháng 11 trong số nhiều ngày.


3

Câu trả lời ngắn gọn (đọc bên dưới để biết thêm thông tin):

ax.grid(axis='both', which='both')

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

Những gì bạn làm là đúng và nó sẽ hoạt động.

Tuy nhiên, vì trục X trong ví dụ của bạn là trục DateTime nên các dấu chọn Chính (hầu hết có thể) chỉ xuất hiện ở cả hai đầu của trục X. Các dấu tick có thể nhìn thấy khác là Dấu tick nhỏ .

Các ax.grid()phương pháp, theo mặc định, vẽ các đường lưới trên Major tick-vết. Do đó, không có gì xuất hiện trong âm mưu của bạn.

Sử dụng mã dưới đây để đánh dấu các dấu tích. Thiếu niên sẽ có màu Xanh trong khi Trẻ vị thành niên có màu Đỏ.

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

Bây giờ để buộc các đường lưới cũng xuất hiện trên các dấu tích Nhỏ, hãy chuyển which='minor'cho phương thức:

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

hoặc đơn giản là sử dụng which='both'để vẽ cả hai đường lưới Chính và Nhỏ. Và đây là một đường lưới thanh lịch hơn:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')

1

Chỉ cho các đường ngang

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

Điều này đã làm việc

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.