Cách tạo đường lưới chính và đường lưới phụ với các kiểu đường kẻ khác nhau trong Python


122

Tôi hiện đang sử dụng matplotlib.pyplotđể tạo đồ thị và muốn có các đường lưới chính liền khối và màu đen và các đường lưới phụ có màu xám hoặc gạch ngang.

Trong thuộc tính lưới which=both/major/mine, và sau đó màu sắc và kiểu đường kẻ được xác định đơn giản bằng kiểu đường kẻ. Có cách nào để chỉ định kiểu dòng nhỏ không?

Mã thích hợp mà tôi có cho đến nay là

plt.plot(current, counts, 'rd', markersize=8)
plt.yscale('log')
plt.grid(b=True, which='both', color='0.65', linestyle='-')

Câu trả lời:


174

Trên thực tế, nó đơn giản như thiết lập majorminorriêng biệt:

In [9]: plot([23, 456, 676, 89, 906, 34, 2345])
Out[9]: [<matplotlib.lines.Line2D at 0x6112f90>]

In [10]: yscale('log')

In [11]: grid(b=True, which='major', color='b', linestyle='-')

In [12]: grid(b=True, which='minor', color='r', linestyle='--')

Gotcha với lưới nhỏ là bạn cũng phải bật các dấu tích nhỏ. Trong đoạn mã trên, điều này được thực hiện bởi yscale('log'), nhưng nó cũng có thể được thực hiện với plt.minorticks_on().

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


32
Đôi khi bạn cũng cần gọi plt.minorticks_on()cho lưới nhỏ thực sự xuất hiện. Xem stackoverflow.com/a/19940830/209246
eqzx

2
Từ tài liệu : "Nếu kwargs được cung cấp, thì giả sử rằng bạn muốn một lưới và do đó b được đặt thành True." - vì vậy bạn có thể bỏ qua b=True.
miku

Tôi đã thử làm điều tương tự với biểu đồ nhật ký kép. Thật không may, trục x chỉ hiển thị các lỗi chính. Có thể bật lại cũng là các thicks nhỏ.
Alexander Cska

1
@Alexander bạn cần thêm axis="both"tham số vào plt.grid()hàm.
Kanmani

Có thuộc tính rcParam nào để đặt nó làm kiểu mặc định không?
Kanmani

21

Một cách tự làm đơn giản là tự làm lưới điện:

import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot([1,2,3], [2,3,4], 'ro')

for xmaj in ax.xaxis.get_majorticklocs():
  ax.axvline(x=xmaj, ls='-')
for xmin in ax.xaxis.get_minorticklocs():
  ax.axvline(x=xmin, ls='--')

for ymaj in ax.yaxis.get_majorticklocs():
  ax.axhline(y=ymaj, ls='-')
for ymin in ax.yaxis.get_minorticklocs():
  ax.axhline(y=ymin, ls='--')
plt.show()
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.