matplotlib x अक्ष साझा करें, लेकिन दोनों के लिए x अक्ष टिक लेबल न दिखाएं, सिर्फ एक


80

मैं अजगर + matplotlib का उपयोग कर रहा हूं और मुझे दो प्लॉट्स का हिस्सा मिल रहा है। यदि आप graph1.set_xticklabels([])एक अक्ष साझा करते समय सेट करने का प्रयास करते हैं, तो इसका कोई प्रभाव नहीं है क्योंकि यह साझा है। क्या अक्ष साझा करने का एक तरीका है और एक भूखंड के x अक्ष को छिपाने में सक्षम है?

जवाबों:


115

यह साझा कुल्हाड़ियों का उपयोग करते समय एक सामान्य गोटा है।

सौभाग्य से, एक साधारण फिक्स है: plt.setp(ax.get_xticklabels(), visible=False)लेबल को केवल एक अक्ष पर अदृश्य बनाने के लिए उपयोग करें।

यह [label.set_visible(False) for label in ax.get_xticklabels()]जो भी इसके लायक है के बराबर है। setpस्वचालित रूप से matplotlib ऑब्जेक्ट्स के साथ-साथ व्यक्तिगत ऑब्जेक्ट्स के चलने योग्य पर काम करेगा।

उदाहरण के तौर पे:

import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(2,1,1)
ax1.plot(range(10), 'b-')

ax2 = fig.add_subplot(2,1,2, sharex=ax1)
ax2.plot(range(10), 'r-')

plt.setp(ax1.get_xticklabels(), visible=False)

plt.show()

वैकल्पिक शब्द


8
मुझे उलटा समस्या थी: दूसरे सबप्लॉट पर लेबल दिखाई नहीं देंगे। इसलिए मैंने आपकी आज्ञा का इस तरह उपयोग किया plt.setp(ax2.get_yticklabels(), visible=True):। निर्दोष रूप से काम किया।
n1000 21

49

Matplotlib- उपयोगकर्ताओं पर एक धागे के अनुसार , आप उपयोग कर सकते हैं

import matplotlib.pyplot as plt
for ax in plt.gcf().axes:
    try:
        ax.label_outer()
    except:
        pass

1
काश मैं इसे और अधिक बढ़ा सकता, क्योंकि यह स्वीकृत उत्तर की तुलना में अधिक सहायक है। एकमात्र स्थिति जिसमें आप उन्हें हटाने के बजाय दृश्यता को संशोधित करना चाहते हैं, सबप्लॉट पर है; और आपका जवाब उस मामले में बहुत चालाक है। धन्यवाद!
मूर

क्यों tryजरूरी है? इसके बिना ठीक लगता है।
EL_DON

1
tryजरूरत है क्योंकि plt.gcf().axesसूची के सभी तत्वों को subplotइंस्टेंस (एक label_outerविधि के साथ ) होने की गारंटी नहीं है ।
निकलें

16

आप Axes.tick_params () का उपयोग कर सकते हैं :

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax2 = fig.add_subplot(212, sharex=ax1)

ax1.tick_params(labelbottom=False)

लेबलबॉटम सेट करना = सत्य ने विपरीत मामले में मेरे लिए इसे हल किया। धन्यवाद।
mclzc

विपरीत परिस्थिति में भी मेरे लिए काम किया, जबकि plt.setp (ax [1] .get_yticklabels (), दृश्यमान = सत्य) नहीं किया।
डेकार्ड

5

आप के साथ subplot निर्माण के दौरान कुल्हाड़ियों साझा कर सकते हैं plt.subplotsके रूप में

fig, axes = plt.subplots(nrows=2, sharex=True)

यह स्वचालित रूप से आंतरिक कुल्हाड़ियों के लिए टिकलैबल्स को बंद कर देगा।

पूरा उदाहरण:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, sharex=True)

axes[0].plot([1,2,3])
axes[1].plot([3,2,1])

plt.show()

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


लेकिन अगर आप टिक्स को प्लॉट के दूसरी तरफ ले जाने की कोशिश करते हैं, तो लेबल वापस आते हैं: /
एंडोलिथ

हाँ सच है, उस विशेष मामले में आपको उन्हें फिर से अदृश्य करने की आवश्यकता है।
ImportanceOfBeingErnest

label_outer()लगता है कि stackoverflow.com/a/12751192/125507
एंडोलिथ

हाँ, यहाँ सभी उत्तर प्रश्न का उत्तर देते हैं !?
ImportanceOfBeingErnest

0

दुर्भाग्य से, मुझे एसमिट के उत्तर पर टिप्पणी करने की अनुमति नहीं है (जो मेरी राय में सबसे अच्छा समाधान है, धन्यवाद एक्मिट), इसलिए मुझे अपनी टिप्पणी को एक नए उत्तर के रूप में लिखना होगा: मैंने उसका समाधान एक सरल कार्य में डाल दिया।

def remove_inner_ticklabels(fig):
    for ax in fig.axes:
        try:
            ax.label_outer()
        except:
            pass

जिसे आप पहले कॉल कर सकते हैं plt.show()। जो किंगटन का जवाब मेरे लिए किसी कारण से काम नहीं आया।

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