मैं matplotlib में शीर्ष और दाईं धुरी को कैसे हटा सकता हूं?


133

डिफ़ॉल्ट "बॉक्सिंग" अक्ष शैली के बजाय मैं केवल बाईं और नीचे की धुरी चाहता हूं, अर्थात:

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

यह आसान होना चाहिए, लेकिन मैं डॉक्स में आवश्यक विकल्प नहीं खोज सकता।

जवाबों:


153

यह आधिकारिक वेबसाइट यहाँ से सुझाव दिया Matplotlib 3 समाधान है :

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

यहाँ छवि विवरण दर्ज करें


2
यह matplotlib के नए संस्करणों में स्वीकृत उत्तर से बेहतर है।
ffledgling

3
शुरुआती लोगों के लिए अतिरिक्त प्रश्न: आप माटप्लोटलिब एपीआई डॉक के आधार पर यह उत्तर कहां से पा सकते हैं? अगर मैं वहां जाता हूं: matplotlib.org/api/axes_api.html मुझे spineऑब्जेक्ट का कोई संदर्भ नहीं दिखता है , और मुझे इस कीवर्ड का अनुमान नहीं होगा।
एरिक ब्यूरेल

63

वैकल्पिक रूप से, यह

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

लगता है कि घुमाए गए लेबल समर्थन को खोए बिना एक अक्ष पर समान प्रभाव प्राप्त करना।

(Matplotlib 1.0.1; समाधान से प्रेरित इस )।


33

संस्करण 1.3.0 में अब (2013-10) में matplotlib को संपादित करें जिसमें यह शामिल है

वह क्षमता वास्तव में सिर्फ जोड़ी गई थी, और आपको इसके लिए सबवर्सन संस्करण की आवश्यकता है। आप यहां उदाहरण कोड देख सकते हैं ।

मैं सिर्फ यह कहने के लिए अपडेट कर रहा हूं कि अब ऑनलाइन एक बेहतर उदाहरण है । अभी भी तोड़फोड़ संस्करण की जरूरत है, अभी तक इसके साथ कोई रिलीज नहीं हुई है।

[संपादित करें] Matplotlib 0.99.0 RC1 बस जारी किया गया था, और इस क्षमता को शामिल करता है।


सुनिश्चित करें कि आपने matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/… पर चेतावनी पढ़ ली है, टिक-मार्क सपोर्ट के बारे में अधूरा होने से पहले आप कोशिश करें और उदाहरण के लिए ऊपर घुमाए गए के साथ उपयोग करें, हालाँकि!
15

ऐसा लगता है कि यह इस बात पर निर्भर करता है कि आप अक्ष का निर्माण कैसे करते हैं। द्वारा उत्पन्न कुल्हाड़ियों को mpl.subplotsइस तरह इस्तेमाल नहीं किया जा सकता है?
स्टीफन वैन डेर वॉल्ट

8
उदाहरण लिंक अब टूट गया है।
mkosmala

10

(यह यहां विस्तृत उत्तरों के अलावा एक एक्सटेंशन टिप्पणी का अधिक है।)


ध्यान दें कि हम इन तीन तत्वों में से प्रत्येक को स्वतंत्र रूप से छिपा सकते हैं:

  • सीमा को छिपाने के लिए (उर्फ "रीढ़"): ax.set_frame_on(False)याax.spines['top'].set_visible(False)

  • टिक छिपाने के लिए: ax.tick_params(top=False)

  • लेबल छिपाने के लिए: ax.tick_params(labeltop=False)


संभावनाओं का अच्छा सारांश। +1
प्यार किया। येशुस

9

यदि आपको टिक्स की आवश्यकता नहीं है और (जैसे गुणात्मक चित्रण की साजिश रचने के लिए) आप इस त्वरित वर्कअराउंड का उपयोग कर सकते हैं:

अक्ष को अदृश्य (जैसे के साथ plt.gca().axison = False) बनाओ और फिर उन्हें मैन्युअल रूप से साथ खींचें plt.arrow


1
यह रीढ़ को हटाने के लिए लगता है लेकिन जगह में टिक के निशान छोड़ दें। किसी भी विचार के रूप में अच्छी तरह से ticks कैसे निकालना है?
रॉब यंग

2
@ रोब: आप सही कह रहे हैं, मैं वास्तव में उस स्क्रिप्ट में एक अलग समाधान का उपयोग करता था जिसके बारे में मैं सोच रहा था। मैंने अपना उत्तर बदल दिया, यह अब काम करना चाहिए, लेकिन सामान्य तौर पर उपरोक्त स्वीकृत समाधान बेहतर है।
निको

9

लाइब्रेरी सीबोर्न ने इसे फंक्शन डेस्पिन () के साथ बनाया है।

बस जोड़ दो:

import seaborn as sns

अब अपना ग्राफ बनाएं। और अंत में जोड़ें:

sns.despine()

यदि आप फ़ंक्शन के कुछ डिफ़ॉल्ट पैरामीटर मानों को देखते हैं तो यह शीर्ष और दाईं रीढ़ को हटा देता है और नीचे और बाईं रीढ़ को रखता है:

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

यहां आगे के दस्तावेज देखें : https://seaborn.pydata.org/generated/seaborn.despine.html


7

यदि आपको इसे अपने सभी भूखंडों से हटाने की आवश्यकता है, तो आप स्टाइल सेटिंग्स (स्टाइल शीट या rcParams) में रीढ़ को हटा सकते हैं। उदाहरण के लिए:

import matplotlib as mpl

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

यदि आप सभी स्पाइन हटाना चाहते हैं:

mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.