Bagaimana saya bisa menghapus sumbu atas dan kanan di matplotlib?


133

Alih-alih gaya sumbu "kotak" default, saya hanya ingin memiliki sumbu kiri dan bawah, yaitu:

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

Ini seharusnya mudah, tetapi saya tidak dapat menemukan opsi yang diperlukan dalam dokumen.

Jawaban:


153

Ini adalah solusi yang disarankan Matplotlib 3 dari situs web resmi DI SINI :

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

masukkan deskripsi gambar di sini


2
Ini lebih baik daripada jawaban yang diterima di versi yang lebih baru dari matplotlib.
— meraba

3
Pertanyaan tambahan untuk pemula: di mana Anda dapat menemukan jawaban ini berdasarkan pada Matplotlib API doc? Jika saya pergi ke sana: matplotlib.org/api/axes_api.html Saya tidak melihat referensi ke spineobjek, dan saya tidak akan menebak kata kunci ini.
— Eric Burel

63

Atau, ini

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

tampaknya mencapai efek yang sama pada sumbu tanpa kehilangan dukungan label yang diputar.

(Matplotlib 1.0.1; solusi yang terinspirasi oleh ini ).


33

[sunting] matplotlib sekarang (2013-10) pada versi 1.3.0 yang mencakup ini

Kemampuan itu sebenarnya baru saja ditambahkan, dan Anda memerlukan versi Subversi untuk itu. Anda dapat melihat kode contoh di sini .

Saya baru saja memperbarui untuk mengatakan bahwa ada contoh online yang lebih baik sekarang. Masih membutuhkan versi Subversion, belum ada rilis dengan ini.

[sunting] Matplotlib 0.99.0 RC1 baru saja dirilis, dan termasuk kemampuan ini.


Pastikan Anda membaca peringatan di matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/... tentang dukungan tanda centang menjadi tidak lengkap sebelum Anda mencoba dan menggunakan di atas dengan misalnya label yang diputar!
— timday

Sepertinya tergantung pada bagaimana Anda membangun sumbu. Sumbu yang dihasilkan oleh mpl.subplotstidak dapat digunakan dengan cara ini?
— Stefan van der Walt

8
Tautan contoh sekarang rusak.
— mkosmala

10

(Ini lebih merupakan komentar ekstensi, di samping jawaban komprehensif di sini.)


Perhatikan bahwa kita dapat menyembunyikan masing-masing dari ketiga elemen ini secara independen satu sama lain:

  • Untuk menyembunyikan perbatasan (alias "tulang belakang"): ax.set_frame_on(False)atauax.spines['top'].set_visible(False)

  • Untuk menyembunyikan kutu: ax.tick_params(top=False)

  • Untuk menyembunyikan label: ax.tick_params(labeltop=False)


ringkasan kemungkinan yang bagus. +1
— loved.by.Yesus

9

Jika Anda tidak memerlukan tanda centang dan semacamnya (misalnya untuk merencanakan ilustrasi kualitatif), Anda juga dapat menggunakan solusi cepat ini:

Buat sumbu tidak terlihat (mis. Dengan plt.gca().axison = False) lalu gambar secara manual plt.arrow.


1
ini tampaknya menghapus duri tetapi meninggalkan tanda centang di tempatnya. Adakah cara untuk menghapus kutu juga?
— Rob Young

2
@ Rob: Anda benar, saya sebenarnya menggunakan solusi berbeda dalam skrip yang saya pikirkan. Saya mengubah jawaban saya, ini seharusnya sudah berfungsi, tetapi secara umum solusi yang diterima di atas lebih baik.
— nikow

9

Library Seaborn memiliki ini dibangun dengan fungsi despine ().

Cukup tambahkan:

import seaborn as sns

Sekarang buat grafik Anda. Dan tambahkan di akhir:

sns.despine()

Jika Anda melihat beberapa nilai parameter default dari fungsi itu menghapus tulang belakang atas dan kanan dan menjaga tulang belakang bagian bawah dan kiri:

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

Lihat dokumentasi lebih lanjut di sini: https://seaborn.pydata.org/generated/seaborn.despine.html


7

Jika Anda perlu menghapusnya dari semua plot Anda, Anda dapat menghapus duri dalam pengaturan gaya (style sheet atau rcParams). Misalnya:

import matplotlib as mpl

mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False

Jika Anda ingin menghapus semua duri:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.