Plots
के साथ बैकएंड विशिष्ट कार्यक्षमता तक पहुंच सरल और शक्तिशाली है, लेकिन कभी-कभी मैं अपनी उपस्थिति को सुदृढ़ करने के लिए साजिश के अलग-अलग तत्वों पर थोड़ा अधिक नियंत्रण रखना चाहता हूं।जूलिया प्लॉट्स
क्या बैकएंड की साजिश वस्तु को सीधे अपडेट करना संभव है?
जैसे डिफ़ॉल्ट pyplot
बैकएंड के लिए, मैं
using Plots
p = plot(sin)
p.o[:axes][1][:xaxis][:set_ticks_position]("top")
कोशिश की, लेकिन भूखंड नहीं बदलता है। p.o[:show]()
कॉल करने के बाद, या तो मदद नहीं करता है।
दूसरे शब्दों में: के साथ शुरू में बनाई गई साजिश के लिए PyPlot
इंटरफ़ेस का उपयोग करने का कोई तरीका है?
संपादित करें:
PyPlot
वस्तु दिखाई देने लगते हैं (यह भी जीयूआई में) में परिवर्तन जब आंकड़ा की बचत:
using Plots
using PyPlot
p = Plots.plot(sin, top_margin=1cm)
gui() # not needed when using the REPL
gca()[:xaxis][:set_ticks_position]("top")
PyPlot.savefig("test.png")
यहाँ, मैं p.o[:axes][1] == gca()
इस्तेमाल किया। किसी को top_margin=1cm
सेट करना होगा क्योंकि साजिश क्षेत्र स्वचालित रूप से समायोजित नहीं होता है (मेरे वास्तविक ठीक-ट्यूनिंग के लिए, इससे कोई फर्क नहीं पड़ता)।
यह बाद के अपडेट के लिए भी काम करता है जब तक केवल PyPlot
इंटरफ़ेस का उपयोग किया जाता है। उदाहरण के लिए, निम्न कमांड के बाद, साजिश लेबल के अलावा एक लाल दाईं बॉर्डर शीर्ष पर होगा:
gca()[:spines]["right"][:set_color]("red")
PyPlot.savefig("test.png")
हालांकि, जब एक Plots
आदेश plot!(xlabel="foo")
की तरह प्रयोग किया जाता है, PyPlot
के साथ किए गए सभी पिछले परिवर्तन ओवरराइट किया है (जो आश्चर्यजनक नहीं है)।
शेष प्रश्न यह है कि PyPlot.savefig
को स्पष्ट रूप से कॉल किए बिना गुई को इंटरैक्टिव रूप से अपडेट करने का तरीका है।
लेकिन आप प्लॉट नोटेशन का उपयोग करके सीधे प्लॉट ऑब्जेक्ट को संपादित कर सकते हैं। इस मामले में 'पी [1] [: xaxis] [: दर्पण] = सच; प्रदर्शन (पी) '। प्लॉट दिखाने के किसी भी अपडेट के लिए 'प्रदर्शन() 'आवश्यक है। –
मैं समझता हूं कि 'p' एक 'प्लॉट्स' ऑब्जेक्ट है, लेकिन ऐसा लगता है कि 'p.o' में कम से कम आंशिक रूप से कार्यात्मक' PyPlot 'ऑब्जेक्ट को लपेटना प्रतीत होता है, वर्कअराउंड के लिए मेरा अपडेट किया गया प्रश्न देखें। बेशक, यदि संभव हो तो किसी को 'प्लॉट्स इंटरफ़ेस' का उपयोग करना चाहिए, जैसे कि इस उदाहरण में, लेकिन कभी-कभी मुझे पता है कि 'PyPlot' में एक विशिष्ट परिवर्तन कैसे करें। इसलिए, 'प्लॉट्स' में 90% साजिश के बाद 'पाइपप्लॉट' ('पाइपलॉट बैकएंड का उपयोग करते समय) को पूरी तरह से नियंत्रित करने के लिए मैं एक तरीका की सराहना करता हूं। – tim
बहुत प्रभावशाली हैकिंग :-) –