Matplotlib में लाइन प्लॉट में प्रदर्शित होने के लिए लंबवत ग्रिडलाइन्स प्राप्त करना


93

मैं अपने प्लॉट पर क्षैतिज और ऊर्ध्वाधर दोनों ग्रिड लाइनें प्राप्त करना चाहता हूं, लेकिन केवल क्षैतिज ग्रिड लाइनें डिफ़ॉल्ट रूप से दिखाई दे रही हैं। मैं pandas.DataFrameएक्स-एक्सिस पर तारीखों के साथ लाइन प्लॉट उत्पन्न करने के लिए अजगर में एक sql क्वेरी से उपयोग कर रहा हूं । मुझे यकीन नहीं है कि वे तारीखों पर दिखाई क्यों नहीं देते हैं और मैंने इस बारे में जवाब खोजने की कोशिश की है, लेकिन एक नहीं मिला।

ग्राफ़ को प्लॉट करने के लिए मैंने सभी का उपयोग किया है नीचे सरल कोड है।

data.plot()
grid('on')

डेटा DataFrame है जिसमें तारीखें और sql क्वेरी से डेटा शामिल हैं।

मैंने नीचे दिए गए कोड को जोड़ने का भी प्रयास किया है, लेकिन मुझे अभी भी कोई ऊर्ध्वाधर ग्रिड लाइनों के साथ एक ही आउटपुट मिलता है।

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines
ax.xaxis.grid() # vertical lines

कोई सुझाव?

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


data.plot(grid="on")मेरे लिए काम किया
मार्कस

जवाबों:


102

आपको अपने कॉल में बूलियन आर्ग देने की आवश्यकता हो सकती है, जैसे कि ax.yaxis.grid(True)इसके बजाय उपयोग करें ax.yaxis.grid()। इसके अतिरिक्त, चूंकि आप उन दोनों का उपयोग कर रहे हैं ax.grid, जिन्हें आप प्रत्येक आयाम के लिए एक बार करने के बजाय, दोनों में काम कर सकते हैं ।

ax = plt.gca()
ax.grid(True)

आपको इसे सुलझाना चाहिए।


मैंने इसकी कोशिश की लेकिन किसी कारण से यह अब भी पहले जैसा ही दिखता है
ओसमंड बिशप

1
क्या आप इंटरएक्टिव इंटरप्रेटर में ऐसा कर रहे हैं? सुनिश्चित करें कि आप कॉल करने से पहले ग्रिड सेट कर रहे हैंplt.show()
wim

मैं iPython का उपयोग कर रहा हूं। मैंने plt.show () को जोड़ने की कोशिश की है इससे कोई फर्क नहीं पड़ेगा।
ओसमंड बिशप

1
वैसे यह अजीब है। आपका ipython संस्करण क्या है, इसे भी चलाने का प्रयास करें ipython --pylab, और plt.grid(True)तुरंत करें - क्या आपको ग्रिड दिखाई देता है?
विम

मैंने कोशिश की plt.grid(True)और ऊर्ध्वाधर और क्षैतिज दोनों ग्रिड लाइनों के साथ खाली ग्राफ प्राप्त किया, इसलिए हां यह अजीब है कि मैं अपने लाइन प्लॉट के लिए यह क्यों नहीं प्राप्त कर सकता हूं। मैं iPython का नवीनतम उपलब्ध संस्करण चला रहा हूं।
ओसमंड बिशप

57

plt.gca().xaxis.grid(True) मेरे लिए समाधान साबित हुआ


6
myaxes.grid(which='x')Matplotlib संस्करण 1.4.2 के साथ मेरे लिए काम नहीं कर रहा था ... नहीं मिल सका whichसब पर काम करने के लिए कीवर्ड। हालांकि, myaxes.xaxis.grid(True)चाल चली और वैचारिक रूप से बेहतर आईएमओ है। ओह, और myaxes.set_axisbelow(True)डेटा के पीछे ग्रिड लगाने के लिए उपयोगी विधि के बारे में मत भूलना ।
16:14 पर ट्रेक पीवीसी

25

Matplotlib प्रलेखन के अनुसार , Axesवर्ग grid()विधि का हस्ताक्षर इस प्रकार है:

Axes.grid (b = कोई नहीं, जो = 'प्रमुख', अक्ष = 'दोनों', ** kwargs)
अक्षों के ग्रिड को चालू या बंद करें।

which यह नियंत्रित करने के लिए 'प्रमुख' (डिफ़ॉल्ट), 'मामूली' या 'दोनों' हो सकते हैं कि क्या प्रमुख टिक ग्रिड, मामूली टिक ग्रिड, या दोनों प्रभावित हैं।

axis ग्रिडलाइनों के सेट को नियंत्रित करने के लिए 'दोनों' (डिफ़ॉल्ट), 'x' या 'y' हो सकते हैं।

तो x अक्ष और y अक्ष दोनों के लिए ग्रिड लाइनें दिखाने के लिए, हम निम्नलिखित कोड का उपयोग कर सकते हैं:

ax = plt.gca()
ax.grid(which='major', axis='both', linestyle='--')

यह विधि हमें ग्रिड लाइनों के लिए क्या दिखाने के लिए बेहतर नियंत्रण प्रदान करती है।


6

शायद यह समस्या को हल कर सकता है: matplotlib, एक भूखंड पर एक ग्रिड के आकार को परिभाषित करें

ax.grid(True, which='both')

सच्चाई यह है कि ग्रिड काम कर रहा है, लेकिन 00:00 में केवल एक वी-ग्रिड है और अन्य में कोई ग्रिड नहीं है। मैं एक ही समस्या को पूरा करता हूं कि कई दिनों के बीच 1 नवंबर में केवल एक ग्रिड है।


3

संक्षिप्त उत्तर (अधिक जानकारी के लिए नीचे पढ़ें):

ax.grid(axis='both', which='both')

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

आप जो करते हैं वह सही है और यह काम करना चाहिए।

हालाँकि, चूंकि आपके उदाहरण में X अक्ष एक DateTime अक्ष है, मेजर टिक-मार्क्स (सबसे अधिक संभवतया) केवल एक्स अक्ष के दोनों सिरों पर दिखाई दे रहे हैं। अन्य दृश्य टिक-मार्क माइनर टिक-मार्क हैं।

ax.grid()विधि, डिफ़ॉल्ट रूप से, मेजर टिक के निशान पर ग्रिड लाइन खींचता है। इसलिए, आपके प्लॉट में कुछ भी दिखाई नहीं देता है।

टिक-निशान को उजागर करने के लिए नीचे दिए गए कोड का उपयोग करें। मेजर ब्लू होंगे जबकि माइनर्स रेड हैं।

ax.tick_params(which='both', width=3)
ax.tick_params(which='major', length=20, color='b')
ax.tick_params(which='minor', length=10, color='r')

अब ग्रिड लाइनों को माइनर टिक-मार्क्स पर भी दिखाई देने के लिए मजबूर करने के which='minor'लिए, विधि को पास करें :

ax.grid(b=True, which='minor', axis='x', color='#000000', linestyle='--')

या बस which='both'मेजर और माइनर ग्रिड लाइनों को खींचने के लिए उपयोग करें। और यह एक और अधिक सुंदर ग्रिड लाइन है:

ax.grid(b=True, which='minor', axis='both', color='#888888', linestyle='--')
ax.grid(b=True, which='major', axis='both', color='#000000', linestyle='-')

1

केवल क्षैतिज रेखाओं के लिए

ax = plt.axes()        
ax.yaxis.grid() # horizontal lines

यह काम किया

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