Câu hỏi Làm thế nào tôi có thể loại bỏ trục trên và bên phải trong matplotlib?


Thay vì kiểu trục "đóng hộp" mặc định, tôi muốn chỉ có trục bên trái và dưới cùng, tức là:

+------+         |
|      |         |
|      |   --->  |
|      |         |
+------+         +-------

Điều này phải dễ dàng, nhưng tôi không thể tìm thấy các tùy chọn cần thiết trong tài liệu.


76
2018-05-29 08:45


gốc




Các câu trả lời:


Đây là giải pháp Matplotlib 2.0 được đề xuất từ ​​trang web chính thức ĐÂY:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)

ax = plt.subplot(111)
ax.plot(x, y)

# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')

plt.show()

enter image description here


63
2017-12-08 15:58



Đây là tốt hơn so với câu trả lời được chấp nhận trong các phiên bản mới hơn của matplotlib. - ffledgling


Ngoài ra, điều này

def simpleaxis(ax):
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.get_xaxis().tick_bottom()
    ax.get_yaxis().tick_left()

dường như đạt được hiệu ứng tương tự trên trục mà không mất hỗ trợ nhãn xoay.

(Matplotlib 1.0.1; giải pháp lấy cảm hứng từ điều này).


59
2017-11-04 15:20





[sửa] matplotlib bây giờ (2013-10) trên phiên bản 1.3.0 bao gồm

Đó là khả năng thực sự chỉ cần thêm vào, và bạn cần phiên bản Subversion cho nó. Bạn có thể xem mã ví dụ đây.

Tôi chỉ cập nhật để nói rằng có một tốt hơn thí dụ trực tuyến ngay bây giờ. Tuy nhiên vẫn cần phiên bản Subversion, chưa có bản phát hành nào được nêu ra.

[sửa] Matplotlib 0.99.0 RC1 vừa được phát hành, và bao gồm khả năng này.


31
2018-05-29 09:21



Đảm bảo bạn đọc cảnh báo tại matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/… về hỗ trợ dấu tick không đầy đủ trước khi bạn thử và sử dụng ở trên với ví dụ như nhãn xoay! - timday
Hãy đảm bảo rằng bạn thật tuyệt với các chỉnh sửa của tôi. - tacaswell
Dường như nó phụ thuộc vào cách bạn xây dựng trục. Các trục được tạo bởi mpl.subplots không thể được sử dụng theo cách này? - Stefan van der Walt
Liên kết ví dụ hiện đã bị hỏng. - mkosmala


Nếu bạn không cần ve và như vậy (ví dụ: để vẽ hình minh họa định tính), bạn cũng có thể sử dụng cách giải quyết nhanh này:

Làm cho trục không nhìn thấy được (ví dụ: plt.gca().axison = False) và sau đó vẽ chúng bằng tay plt.arrow.


7
2018-05-29 10:06



điều này dường như để loại bỏ các gai nhưng để lại dấu tick tại chỗ. Bất kỳ ý tưởng làm thế nào để loại bỏ các ve là tốt? - Rob Young
@ Rob: Bạn nói đúng, tôi thực sự đã sử dụng một giải pháp khác trong kịch bản mà tôi đã nghĩ đến. Tôi thay đổi câu trả lời của tôi, điều này bây giờ sẽ làm việc, nhưng nói chung giải pháp được chấp nhận ở trên là tốt hơn. - nikow


(Đây là phần bình luận mở rộng, ngoài các câu trả lời toàn diện ở đây.)


Lưu ý rằng chúng tôi có thể ẩn từng phần tử trong số ba phần tử này một cách độc lập với nhau:

  • Để ẩn đường viền (còn gọi là "cột sống"): ax.set_frame_on(False) hoặc là ax.spines['top'].set_visible(False)

  • Để ẩn các dấu tích: ax.tick_params(top=False)

  • Để ẩn nhãn: ax.tick_params(labeltop=False)


1
2017-12-27 10:10





Thư viện Seaborn đã được xây dựng với hàm despine ().

Chỉ cần thêm:

import seaborn as sns

Bây giờ tạo biểu đồ của bạn. Và thêm vào cuối:

sns.despine()

Nếu bạn nhìn vào một số giá trị tham số mặc định của hàm, nó sẽ loại bỏ cột sống trên cùng và bên phải và giữ cột sống phía dưới và bên trái:

sns.despine(top=True, right=True, left=False, bottom=False)

Xem thêm tài liệu tại đây: https://seaborn.pydata.org/generated/seaborn.despine.html


0
2017-07-05 07:48





Điều này là thô sơ hơn nhiều, nhưng có thể làm các trick:

remove_border ()


-4
2018-01-11 05:44