Matplotlib के साथ पायथन में प्लॉटिंग का समय


164

मेरे पास प्रारूप में टाइमस्टैम्प की एक सरणी है (HH: MM: SS.mmmmmm) और फ्लोटिंग पॉइंट संख्याओं का एक और सरणी, प्रत्येक टाइमस्टैम्प सरणी में एक मान है।

क्या मैं Matplotlib का उपयोग करके x- अक्ष और y- अक्ष पर संख्याओं पर समय बिता सकता हूँ?

मैं कोशिश कर रहा था, लेकिन किसी तरह यह केवल झांकियों के सरणियों को स्वीकार कर रहा था। समय को प्लॉट करने के लिए मैं इसे कैसे प्राप्त कर सकता हूं? क्या मुझे किसी भी तरह से प्रारूप को संशोधित करना है?

जवाबों:


178

आपको पहले अपने टाइमस्टैम्प्स को पायथन datetimeऑब्जेक्ट्स (उपयोग datetime.strptime) में बदलना होगा । फिर date2numतारीखों को matplotlib फॉर्मेट में बदलने के लिए उपयोग करें।

दिनांक और मूल्यों का उपयोग करके प्लॉट करें plot_date:

dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)

3
क्या यह दिनांक या बस समय की साजिश करेगा? मैं केवल समय चाहते हैं के बाद से दिनांक के लिए रूपांतरण पर, साल सेट 1990 के लिए है
randomThought

"... डेटाइम में रूपांतरण के लिए, वर्ष 1990 के लिए सेट है": क्या आप स्ट्रिंग से डेटाटाइम में कनवर्ट करने के लिए आपके द्वारा उपयोग किए जाने वाले कोड को पोस्ट कर सकते हैं? रूपांतरण के साथ कुछ गलत हो सकता है। पुन। चार्ट लेबल का प्रारूपण, JK Seppänen द्वारा प्रदान की गई date_demo1 लिंक देखें। Matplot lib प्रलेखन उत्कृष्ट है, BTW। matplotlib.sourceforge.net/index.html
13

14
plot_dates -> matplotlib.pyplot.plot_date (दिनांक, मूल्य)
पीट

3
तितर बितर साजिश के बारे में क्या? मैं बिखराव-बुलबुले के आकार को निर्धारित करने के लिए एक आकार सरणी प्रदान करना चाहता हूं, लेकिन scatter_date()इस ग्राफ को प्राप्त करने के लिए कोई समकक्ष , और कोई स्पष्ट / प्रत्यक्ष तरीका नहीं है।
dwanderson

4
उपरोक्त एक प्रकार की वस्तु के साथ एक सूची देता है: matplotlib.lines.Line2D ऑब्जेक्ट। अब मैं ग्राफ़ दिखाने के लिए इसका उपयोग कैसे करूँ?
अरिंदम रॉयचौधरी

87

आप टाइमस्टैम्प, वैल्यू पेयर को pyplot.plot (उनके स्ट्रिंग प्रतिनिधित्व से उन्हें पार्स करने के बाद) का उपयोग करके भी कर सकते हैं । (Matplotlib संस्करणों 1.2.0 और 1.3.1 के साथ परीक्षण किया गया।)

उदाहरण:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

परिणामी छवि:

लाइन प्लॉट


यहाँ एक तितर बितर साजिश के रूप में ही है:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

इसके समान एक छवि का निर्माण करता है:

स्कैटर प्लॉट


4
@andi यह मेरे उदाहरण (परिवर्तन के रूप में सिर्फ काम करना चाहिए plotकरने के लिए scatter)।
moooeeeep

1
मुझे समझ नहीं आ रहा है कि यह 5 वां सवाल क्यों है जिसका मैंने सामना किया है, जहां किसी ने वास्तव में तितर बितर साजिश का उपयोग करके TRIED नहीं किया है - यह काम नहीं करता है। Type Error - invalid type promotion
dwanderson

1
@dwanderson तब, शायद आप कुछ गलत कर रहे हैं। मैंने datetime.datetimeअपनी पोस्ट में एक्स अक्ष पर वस्तुओं के साथ स्कैटर प्लॉट के लिए एक उदाहरण जोड़ा है ।
मूओइप

ग्रिड ऐड के लिएplt.grid(True)
क्रिस्टोफ रूसो

1
@AimForClarity matplotlib.__version__2.2.2 के साथ मेरे लिए काम करता है । स्कैटर प्लॉट में डिफ़ॉल्ट रूप से कुछ अधिक विस्तृत एक्स-सीमाएँ हैं, हालाँकि। यह उत्तर मैन्युअल रूप से समायोजित करने के अलावा एक वर्कअराउंड प्रदान करने के लिए लगता है plt.xlim(...): stackoverflow.com/a/46467896/1025391
moooeeeep

23

7 साल बाद और इस कोड ने मेरी मदद की है। हालाँकि, मेरा समय अभी भी सही ढंग से दिखाई नहीं दे रहा था।

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

Matplotlib 2.0.0 का उपयोग करना और मुझे पॉल एच। द्वारा matplotlib में x- अक्ष टिक लेबल की तारीख को संपादित करने से निम्नलिखित बिट कोड जोड़ना था ।

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

मैंने प्रारूप को (% H:% M) और समय को सही ढंग से प्रदर्शित किया। यहां छवि विवरण दर्ज करें

सभी समुदाय के लिए धन्यवाद।


16

मुझे matplotlib संस्करण: 2.0.2 के उपयोग से यह परेशानी थी। ऊपर से उदाहरण चलाते हुए मुझे बुलबुले का एक केंद्रित ढेर मिला।

बुलबुले के केंद्रित ढेर के साथ ग्राफ

मैंने दूसरी पंक्ति जोड़कर समस्या को "ठीक" कर दिया:

plt.plot([],[])

पूरा कोड स्निपेट बन जाता है:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates


# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot([],[])
plt.scatter(x,y)

# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)

plt.show()
plt.close()

यह वांछित के रूप में वितरित बुलबुले के साथ एक छवि पैदा करता है।

बुलबुले समय के साथ वितरित किए गए


मेरे लिए py2.6 पर काम नहीं करता। मुझे ValueError मिलती है: दृश्य सीमा न्यूनतम -0.05500000000000001 1 से कम है और एक अमान्य Matplotlib दिनांक मान है। यह अक्सर तब होता है जब आप एक अक्ष के लिए एक गैर-डेटाइम मान पास करते हैं जिसमें डेटाटाइम इकाइयां होती हैं <1
एक्सएस

अजीब एक्स-लिम्स का एक समाधान उन्हें अपने दम पर सेट करना है: stackoverflow.com/questions/21423158/…
Qaswed
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.