Matplotlib भूखंडों में अक्ष पाठ छिपाते हुए


369

मैं या तो कुल्हाड़ियों या संख्याओं पर संख्याओं के बिना एक आंकड़ा बनाने की कोशिश कर रहा हूं (मैं पारंपरिक अर्थों में कुल्हाड़ियों का उपयोग करता हूं, न कि मैटलपोटलिब नामकरण!)। एक मुद्दा जो मेरे सामने आया है वह है जहां matplotlib एक मान N को घटाकर x (y) टिकब्लाबल्स को समायोजित करता है, फिर अक्ष के अंत में N जोड़ता है।

यह अस्पष्ट हो सकता है, लेकिन निम्नलिखित सरलीकृत उदाहरण इस मुद्दे को उजागर करता है, जिसमें '6.18' एन का अपमानजनक मूल्य है:

import matplotlib.pyplot as plt
import random
prefix = 6.18

rx = [prefix+(0.001*random.random()) for i in arange(100)]
ry = [prefix+(0.001*random.random()) for i in arange(100)]
plt.plot(rx,ry,'ko')

frame1 = plt.gca()
for xlabel_i in frame1.axes.get_xticklabels():
    xlabel_i.set_visible(False)
    xlabel_i.set_fontsize(0.0)
for xlabel_i in frame1.axes.get_yticklabels():
    xlabel_i.set_fontsize(0.0)
    xlabel_i.set_visible(False)
for tick in frame1.axes.get_xticklines():
    tick.set_visible(False)
for tick in frame1.axes.get_yticklines():
    tick.set_visible(False)

plt.show()

मैं जिन तीन चीजों को जानना चाहूंगा वे हैं:

  1. पहली जगह में इस व्यवहार को कैसे बंद करें (हालांकि ज्यादातर मामलों में यह उपयोगी है, यह हमेशा नहीं होता है!) मैंने देखा है matplotlib.axis.XAxisऔर कुछ भी उपयुक्त नहीं हो सकता है।

  2. मैं एन गायब कैसे कर सकता हूं (यानी X.set_visible(False))

  3. वहाँ वैसे भी ऊपर करने के लिए एक बेहतर तरीका है? मेरा अंतिम प्लॉट किसी आंकड़े में 4x4 सबप्लॉट होगा, यदि यह प्रासंगिक है।


मुझे थोड़ा संदेह है कि यहां कोई भी उत्तर वास्तव में प्रश्न का उत्तर देता है। मेरे लिए यह ऐसा लगता है जैसे प्रश्न पूछता है कि ऑफसेट से छुटकारा कैसे प्राप्त करें । फिर भी सभी उत्तर विभिन्न तरीकों को दिखाते हैं कि सभी टिकबेलों से कैसे छुटकारा पाया जाए। यदि प्रश्न उत्तर द्वारा सुपरसाइड किया गया है, तो शायद किसी को यह प्रश्न पूछने के लिए संपादित करना चाहिए कि उत्तर क्या समाधान प्रदान करते हैं?
ImportanceOfBeingErnest

जवाबों:


469

प्रत्येक तत्व को छिपाने के बजाय, आप पूरे अक्ष को छिपा सकते हैं:

frame1.axes.get_xaxis().set_visible(False)
frame1.axes.get_yaxis().set_visible(False)

या, आप टिक को खाली सूची पर सेट कर सकते हैं:

frame1.axes.get_xaxis().set_ticks([])
frame1.axes.get_yaxis().set_ticks([])

इस दूसरे विकल्प में, आप अभी भी उपयोग कर सकते हैं plt.xlabel()और plt.ylabel()अक्षों पर लेबल जोड़ सकते हैं।


2
हेरी - यह बहुत अच्छा है, धन्यवाद, लेकिन अब (सिर्फ अजीब होने के लिए) अगर मैं एक xlabel () जोड़ना चाहता हूं तो क्या होगा? पाठ विजेट मैन्युअल रूप से रखने के अलावा।
डेव

5
आप इस उदाहरण को 3D में कैसे बढ़ा सकते हैं? ax = plt.gca (प्रोजेक्शन = '3 डी'), ax.axes.get_zaxis (); सेट_विशेष (गलत) देता है'Axes3DSubplot' object has no attribute 'get_zaxis'
user989762

13
यह उत्तर ग्रिड लाइनों को दिखाने की अनुमति नहीं देता है। @Saullo कैस्टरो द्वारा जवाब हालांकि ...
evan54

समस्या यह है कि जब x_axis को अदृश्य पर सेट किया जाता है, तो ग्रिड dsappears :( संपादित करें: बस देखा @Saullo कास्त्रो का जवाब जिसने समस्या को ठीक किया।
शैलेन

1
@ user989762 आपके मामले में यह तरीका काम नहीं करेगा, यहाँ तक कि यह भी नहीं get_xaxis().set_visible(False)। मुझे लगता है कि इस मामले में matplotlib कुछ मापदंडों को इनिशियलाइज़ करता है जैसे कि प्लॉट 2D है। ax.set_zticks([])आप क्या चाहते हैं
kon psych

222

यदि आप ग्रिड लाइनों को ध्यान में रखते हुए सिर्फ अक्ष पाठ को छिपाना चाहते हैं:

frame1 = plt.gca()
frame1.axes.xaxis.set_ticklabels([])
frame1.axes.yaxis.set_ticklabels([])

ग्रिड लाइनों को करना set_visible(False)या set_ticks([])छिपाना भी होगा।


4
यह उन सभी सबप्लॉट के लेबल को हटा देता है जो उस अक्ष को साझा करते हैं: /
एंडोलिथ

136

यदि आप मेरी तरह हैं और हमेशा कुल्हाड़ियों को पुनर्प्राप्त नहीं करते हैं ax, जब आंकड़ा की साजिश रचते हैं, तो एक सरल समाधान करना होगा

plt.xticks([])
plt.yticks([])

56

कुछ हद तक एक पुराने धागे के साथ, लेकिन यह matplotlib के नवीनतम संस्करण का उपयोग करके एक तेज़ तरीका प्रतीत होता है:

एक्स-अक्ष के लिए प्रमुख फ़ॉर्मेटर सेट करें

ax.xaxis.set_major_formatter(plt.NullFormatter())

1
क्या होगा यदि आप केवल एक टिक के लिए करना चाहते हैं?
tommy.carstensen

5
हां, यह केवल लेबल को छिपाने के लिए उपयोगी है, क्योंकि .set_xticks ([]) स्वयं भी टिक के निशान हटाता है।
zbyszek

49

मैं वास्तव में यहां किसी भी कोड स्निपेट के आधार पर सीमाओं या अक्ष डेटा के बिना एक छवि प्रस्तुत करने में सक्षम नहीं था (यहां तक ​​कि उत्तर में स्वीकार किए गए एक)। कुछ एपीआई प्रलेखन के माध्यम से खुदाई करने के बाद, मैं अपनी छवि को प्रस्तुत करने के लिए इस कोड पर उतरा

plt.axis('off')
plt.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig('foo.png', dpi=100, bbox_inches='tight', pad_inches=0.0)

मैंने tick_paramsकॉल का उपयोग मूल रूप से किसी भी अतिरिक्त जानकारी को बंद करने के लिए किया था जो कि प्रदान की जा सकती है और मेरी आउटपुट फ़ाइल में एक आदर्श ग्राफ है।


1
जब कुल्हाड़ियों को साझा किया जाता है, तो set_ticklabels पर आधारित समाधान साझा कुल्हाड़ियों पर फैलता है। केवल tick_params पर आधारित यह समाधान मेरे लिए ठीक काम कर रहा था।
क्रिश्चियन ओ'रिली

39

मैंने इस प्रक्रिया को आसान बनाने के लिए इस आंकड़े को कोडित किया है।

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)

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

आपके पास इन आदेशों का उपयोग करने वाले आंकड़े पर पूर्ण नियंत्रण हो सकता है, मैंने जो उत्तर दिया है उसे पूरा करने के लिए स्प्लिन पर भी नियंत्रण है:

ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# X AXIS -BORDER
ax.spines['bottom'].set_visible(False)
# BLUE
ax.set_xticklabels([])
# RED
ax.set_xticks([])
# RED AND BLUE TOGETHER
ax.axes.get_xaxis().set_visible(False)

# Y AXIS -BORDER
ax.spines['left'].set_visible(False)
# YELLOW
ax.set_yticklabels([])
# GREEN
ax.set_yticks([])
# YELLOW AND GREEN TOGHETHER
ax.axes.get_yaxis().set_visible(False)

ax.set_xticklabels([])और ax.set_xticks([])मेरे लिए काम नहीं किया, लेकिन ax.axes.get_xaxis().set_visible(False)किया।
होमेरो एस्मेराल्डो

2
यह स्वीकृत उत्तर होना चाहिए
जेसन एस

6

ऑब्जेक्ट ओरिएंटेड एपीआई का उपयोग करते समय, Axesऑब्जेक्ट में अक्ष पाठ को हटाने के लिए दो उपयोगी तरीके हैं, set_xticklabels()और set_xticks()

आप का उपयोग कर एक भूखंड बनाने के लिए कहें

fig, ax = plt.subplots(1)
ax.plot(x, y)

यदि आप केवल टिक लेबल हटाना चाहते हैं, तो आप उपयोग कर सकते हैं

ax.set_xticklabels([])

या टिक्स को पूरी तरह से हटाने के लिए, आप उपयोग कर सकते हैं

ax.set_xticks([])

ये विधियाँ वास्तव में निर्दिष्ट करने के लिए उपयोगी हैं जहाँ आप टिक्स चाहते हैं और आप उन्हें कैसे लेबल करना चाहते हैं। खाली सूची पास करने पर क्रमशः कोई टिक, या कोई लेबल नहीं होता है।


2

एक चाल यह छिपाने के लिए सफेद के रूप में टिक लेबल का रंग निर्धारित किया जा सकता है!

plt.xticks(color='w')
plt.yticks(color='w')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.