दिलचस्प पोस्ट
ड्रॉप फाइल इवेंट सिमुलेट करें कैसे x 86 अनुसूचित, ठीक हैं? आप एक अजगर time.struct_time ऑब्जेक्ट को एक datetime ऑब्जेक्ट में कैसे परिवर्तित करते हैं? क्या NOLOCK (SQL सर्वर संकेत) खराब अभ्यास है? C ++ में एक गैर तुच्छ कन्स्ट्रक्टर क्या है? AngularJS: फ़ैक्टरी के बजाय सेवा का उपयोग कब किया जाए जावास्क्रिप्ट दिनांक में दिन जोड़ें सदस्य चर के लिए PHP कर्ली ब्रेस सिंटैक्स नए अपवाद के बजाय थ्रोएबल का उपयोग कब किया जाना चाहिए? SQL सर्वर 2000 का उपयोग कर पिवट AngularJS में XML सेवाओं को कैसे प्रबंधित करें? जावास्क्रिप्ट प्रोटोटाइप ऑब्जेक्ट का उपयोग करते समय इवेंट विधियों में "यह" कीवर्ड सी + + यादृच्छिक फ्लोट संख्या पीढ़ी स्काला में, "प्रारंभिक प्रारंभकर्ता" क्या है? आधार64 में ब्लॉब कन्वर्ट करें

Matlotlib में एक दूसरे एक्स-एक्स जोड़ने के लिए

मेरे पास एक बहुत ही सरल सवाल है मुझे अपनी साजिश में दूसरा एक्स-एक्स होना चाहिए और मैं चाहता हूं कि इस धुरी में निश्चित अक्षरों की संख्या होती है जो पहले अक्ष की कुछ स्थिति के अनुरूप होती है।

एक उदाहरण के साथ कोशिश करते हैं। यहां मैं 1 / (1 + z) के रूप में परिभाषित विस्तार कारक के एक कार्य के रूप में काले पदार्थ के द्रव्यमान को साजिश कर रहा हूं, जो कि 0 से 1 के बीच है

semilogy(1/(1+z),mass_acc_massive,'-',label='DM') xlim(0,1) ylim(1e8,5e12) 

मुझे अपनी साजिश के शीर्ष पर एक और एक्स-एक्स होना है, जो विस्तार कारक के कुछ मानों के लिए संबंधित ज़ोन दिखा रहा है। क्या यह संभव है? यदि हां, तो मेरे पास एक्सटिक्स कुल्हाड़ी कैसे हो सकती है

वेब के समाधान से एकत्रित समाधान "Matlotlib में एक दूसरे एक्स-एक्स जोड़ने के लिए"

मैं @ धरा के उत्तर में टिप्पणियों से एक क्यू ले रहा हूं, ऐसा लगता है कि आप पुराने एक्स-अक्ष से नए एक्स-अक्ष तक एक फ़ंक्शन द्वारा new_tick_locations सूची सेट करना चाहते हैं। नीचे tick_function अंक के एक numpy सरणी में लेता है, उन्हें एक नए मान के लिए नक्शे और उन्हें प्रारूपित करता है:

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twiny() X = np.linspace(0,1,1000) Y = np.cos(X*20) ax1.plot(X,Y) ax1.set_xlabel(r"Original x-axis: $X$") new_tick_locations = np.array([.2, .5, .9]) def tick_function(X): V = 1/(1+X) return ["%.3f" % z for z in V] ax2.set_xlim(ax1.get_xlim()) ax2.set_xticks(new_tick_locations) ax2.set_xticklabels(tick_function(new_tick_locations)) ax2.set_xlabel(r"Modified x-axis: $1/(1+X)$") plt.show() 

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

आप 2 एक्स-अक्ष स्केल बनाने के लिए जुड़वां का उपयोग कर सकते हैं उदाहरण के लिए:

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twiny() a = np.cos(2*np.pi*np.linspace(0, 1, 60.)) ax1.plot(range(60), a) ax2.plot(range(100), np.ones(100)) # Create a dummy plot ax2.cla() plt.show() 

रेफरी: http://matplotlib.sourceforge.net/faq/howto_faq.html#multiple-y-axis-scales

आउटपुट: यहां छवि विवरण दर्ज करें

धरा के जवाब में आपके प्रश्न का उत्तर देते हुए कहते हैं: " मैं दूसरी एक्स-अक्ष इन टिकियों पर चाहूंगा: (7,8,99) एक्स-अक्ष की स्थिति 10, 30, 40 के अनुरूप। क्या यह किसी तरह से संभव है? " हाँ , यह है।

 import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) a = np.cos(2*np.pi*np.linspace(0, 1, 60.)) ax1.plot(range(60), a) ax1.set_xlim(0, 60) ax1.set_xlabel("x") ax1.set_ylabel("y") ax2 = ax1.twiny() ax2.set_xlabel("x-transformed") ax2.set_xlim(0, 60) ax2.set_xticks([10, 30, 40]) ax2.set_xticklabels(['7','8','99']) plt.show() 

आपको मिलेगा: यहां छवि विवरण दर्ज करें

यदि आप चाहते हैं कि आपके ऊपरी अक्ष को कम धुरी के टिकटिक मानों का फ़ंक्शन हो:

 import matplotlib.pyplot as plt fig, ax1 = plt.subplots() ax1 = fig.add_subplot(111) ax1.plot(range(5), range(5)) ax1.grid(True) ax2 = ax1.twiny() ax1Xs = ax1.get_xticks() ax2Xs = [] for X in ax1Xs: ax2Xs.append(X * 2) ax2.set_xticks(ax1Xs) ax2.set_xbound(ax1.get_xbound()) ax2.set_xticklabels(ax2Xs) title = ax1.set_title("Upper x-axis ticks are lower x-axis ticks doubled!") title.set_y(1.1) fig.subplots_adjust(top=0.85) fig.savefig("1.png") 

देता है:

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

मुझे कम प्रतिष्ठा के कारण टिप्पणी के बजाए इसे उत्तर के रूप में पोस्ट करने के लिए मजबूर कर दिया गया है। मैटेओ में मुझे एक ऐसी ही समस्या थी अंतर यह है कि मेरी पहली एक्स-अक्ष से मेरी दूसरी एक्स-अक्ष में कोई मानचित्र नहीं था, केवल खुद को एक्स-वैल्यू इसलिए मैं अपने दूसरे एक्स-एक्स पर डेटा सीधे सेट करना चाहता था, न कि टिक, हालांकि, कोई axes.set_xdata नहीं है axes.set_xdata मैं एक संशोधन के साथ ऐसा करने के लिए धरा के उत्तर का उपयोग करने में सक्षम था:

 ax2.lines = [] 

के बजाय का उपयोग करने का:

 ax2.cla() 

जब प्रयोग में भी मेरी ax1 से मंजूरी दी