में स्वतंत्र स्केलिंग के साथ एकाधिक ओवरलैपिंग प्लॉट्स में वर्तमान में कोड है जो एक ही स्क्रीन पर डेटा के एकाधिक सेट प्रदर्शित करने के लिए matplotlib.pylab.plot
कई बार कॉल करता है, और सभी प्लॉट्स पर विचार करते हुए मैटलप्लिब प्रत्येक वैश्विक न्यूनतम और अधिकतम तक स्केल करता है। क्या यह एक साजिश है कि प्रत्येक साजिश को स्वतंत्र रूप से, उस विशेष साजिश के न्यूनतम और अधिकतम तक स्केल करने के लिए कहें?Matplotlib
उत्तर
इस के लिए कोई सीधा समर्थन नहीं है, लेकिन यहाँ है कि दो स्वतंत्र ऊर्ध्वाधर अक्ष illlustrates एक mailing list posting से कुछ कोड है:
x=arange(10)
y1=sin(x)
y2=10*cos(x)
rect=[0.1,0.1,0.8,0.8]
a1=axes(rect)
a1.yaxis.tick_left()
plot(x,y1)
ylabel('axis 1')
xlabel('x')
a2=axes(rect,frameon=False)
a2.yaxis.tick_right()
plot(x,y2)
a2.yaxis.set_label_position('right')
ylabel('axis 2')
a2.set_xticks([])
इस तरह आप एक ही प्लॉट बनाने है (add_subplot (1,1,1)) और y-axes पर पैमाने को सीमित करें।
myFig = figure()
myPlot = self.figure.add_subplot(1,1,1)
myPlot.plot([1,2,3,4,5], [5,4,3,2,1], '+r')
myPlot.set_ylim(1,5) # Limit y-axes min 1, max 5
मुझे ऐसा कुछ चाहिए लेकिन एक ऐसा उदाहरण बनाना चाहता था जिसे आप इंटरैक्टिव खोल में कॉपी और पेस्ट कर सकें और इसे देखें। यहाँ यह आप में से जो एक काम कर समाधान की आवश्यकता होती है के लिए है:
from numpy import arange
from math import sin, cos
import matplotlib.pyplot as plt
x = arange(10)
y1 = [sin(i) for i in x]
y2 = [10*cos(i) for i in x]
rect = [0.1, 0.1, 0.8, 0.8]
a1 = plt.axes(rect) # Create subplot, rect = [left, bottom, width, height] in normalized (0, 1) units
a1.yaxis.tick_left() # Use ticks only on left side of plot
plt.plot(x, y1)
plt.ylabel('axis 1')
plt.xlabel('x')
a2 = plt.axes(rect, frameon=False) # frameon, if False, suppress drawing the figure frame
a2.yaxis.tick_right()
plt.plot(x, y2)
a2.yaxis.set_label_position('right')
plt.ylabel('axis 2')
a2.set_xticks([])
plt.show()
परीक्षण किया गया और अजगर 2.7.6, numpy 1.8.1, matpotlib 1.3.1 में काम करता है। मैं इसके साथ खेलना जारी रखूंगा, ओवरलेइंग डेट प्लॉट के साथ काम करने के लिए एक साफ तरीका तलाश रहा हूं। मैं अपने निष्कर्ष वापस पोस्ट करूंगा।
यहां डेट प्लॉट का उपयोग करके एक समाधान है, और मुझे लगता है कि यह दूसरा वाई अक्ष जोड़ने के लिए twinx() का उपयोग करके सबसे अनुकूलित समाधान है।
import matplotlib.pyplot as plt
import matplotlib.dates as md
import datetime
import numpy
numpy.random.seed(0)
t = md.drange(datetime.datetime(2012, 11, 1),
datetime.datetime(2014, 4, 01),
datetime.timedelta(hours=1)) # takes start, end, delta
x1 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 40000
x2 = numpy.cumsum(numpy.random.random(len(t)) - 0.5) * 0.002
fig = plt.figure()
ax1 = fig.add_subplot(111)
fig.suptitle('a title', fontsize=14)
fig.autofmt_xdate()
plt.ylabel('axis 1')
plt.xlabel('dates')
ax2 = ax1.twinx()
ax1.plot_date(t, x1, 'b-', alpha=.65)
ax2.plot_date(t, x2, 'r-', alpha=.65)
plt.ylabel('axis 2')
plt.show()
डॉक्स से, matplotlib.pyplot.twinx (कुल्हाड़ी = कोई नहीं) एक दूसरे कुल्हाड़ियों कि x- अक्ष के शेयरों बनाओ। नई अक्ष ओवरले कुल्हाड़ी (या कुल्हाड़ी अगर कोई अक्ष नहीं है)। Ax2 के लिए टिक दाईं ओर रखे जाएंगे, और ax2 इंस्टेंस वापस कर दिया जाएगा। अधिक here।
- 1. matplotlib
- 2. matplotlib
- 3. matplotlib
- 4. matplotlib
- 5. Matplotlib
- 6. matplotlib
- 7. matplotlib
- 8. matplotlib
- 9. matplotlib
- 10. matplotlib
- 11. matplotlib
- 12. matplotlib
- 13. matplotlib
- 14. matplotlib
- 15. matplotlib
- 16. MatPlotLib
- 17. matplotlib?
- 18. matplotlib
- 19. matplotlib
- 20. matplotlib
- 21. matplotlib
- 22. matplotlib
- 23. matplotlib
- 24. matplotlib
- 25. matplotlib
- 26. matplotlib
- 27. matplotlib
- 28. matplotlib
- 29. matplotlib
- 30. matplotlib
मूल प्रश्न का दायरा 2 स्केल किए गए भूखंडों की बजाय एन के लिए किया गया है - जब मैं 3 या उससे अधिक की कोशिश करता हूं तो यह मर जाता है (अतिरिक्त अक्ष उदाहरणों के लिए ए 2, ए 3 और इतने पर उपयोग करना।) कोई विचार कैसे प्राप्त करें एक बार में ठीक से स्केल किए गए डेटासेट का एक पूरा समूह? – tehwalrus