2012-07-23 6 views
24

मैं पायथन 2.7 और matplotlib का उपयोग करता हूं। मैं एक * .txt डेटा फ़ाइल है:इनपुट * .txt फ़ाइल का उपयोग कर एक बहुत ही सरल बार चार्ट (पायथन, Matplotlib) कैसे प्लॉट करें?

0 14-11-2003 
1 15-03-1999 
12 04-12-2012 
33 09-05-2007 
44 16-08-1998 
55 25-07-2001 
76 31-12-2011 
87 25-06-1993 
118 16-02-1995 
119 10-02-1981 
145 03-05-2014 

मेरी फ़ाइल के पहले स्तंभ (संख्या) मेरी बार चार्ट में अक्ष Y पर होना चाहिए, और मेरे फ़ाइल से दूसरे स्तंभ (तारीखों) में अक्ष OX पर होना चाहिए मेरा हिस्टोग्राम मैं केवल जानते हैं कि कैसे फ़ाइल को पढ़ने के लिए:

OX = [] 
OY = [] 

try : 
    with open('data.txt', 'r') as openedFile : 
     for line in openedFile : 
      tab = line.split() 
      OY.append(int(tab[0])) 
      OX.append(str(tab[1])) 
except IOError : 
    print("IOError!") 

मैं एक matplotlib डॉक्स पढ़ा है लेकिन यह अभी भी मेरी मदद नहीं करता है। मैं भी दिनांकों मैं अपने बार चार्ट को पढ़ने के लिए जोड़ना चाहते हैं, यह

this

किसी कृपया मेरी मदद कर सके की तरह लग रहे बनाने के लिए?

उत्तर

29

आप हिस्टोग्राम के बारे में बात कर रहे हैं, लेकिन यह काफी मतलब नहीं है। हिस्टोग्राम और बार चार्ट अलग-अलग चीजें हैं। एक हिस्टोग्राम एक बार चार्ट होगा जो प्रति वर्ष मूल्यों का योग दर्शाता है, उदाहरण के लिए। यहां, आप बस सलाखों के बाद लगते हैं।

import pylab as pl 
import datetime 

data = """0 14-11-2003 
1 15-03-1999 
12 04-12-2012 
33 09-05-2007 
44 16-08-1998 
55 25-07-2001 
76 31-12-2011 
87 25-06-1993 
118 16-02-1995 
119 10-02-1981 
145 03-05-2014""" 

values = [] 
dates = [] 

for line in data.split("\n"): 
    x, y = line.split() 
    values.append(int(x)) 
    dates.append(datetime.datetime.strptime(y, "%d-%m-%Y").date()) 

fig = pl.figure() 
ax = pl.subplot(111) 
ax.bar(dates, values, width=100) 
ax.xaxis_date() 

आप strptime साथ तिथि को पार्स और x- अक्ष दिनांकों उपयोग करने के लिए निर्धारित करने की आवश्यकता (:

यहाँ अपने डेटा से कोई पूर्ण उदाहरण है कि प्रत्येक की तारीख में प्रत्येक आवश्यक मूल्य के लिए के एक बार से पता चलता है जैसा कि this answer में वर्णित है)।

आप X- अक्ष एक रेखीय समय के पैमाने दिखाने होने में दिलचस्पी नहीं कर रहे हैं, लेकिन सिर्फ लेबल के साथ सलाखों चाहते हैं, आप के बजाय यह कर सकते हैं:

fig = pl.figure() 
ax = pl.subplot(111) 
ax.bar(range(len(dates)), values) 

संपादित करें: के बाद टिप्पणी, सभी के लिए टिक्स, और उन्हें केंद्रित होना करने के लिए, set_ticks को सीमा पारित (और उन्हें आधा बार चौड़ाई से ले जाते हैं):

fig = pl.figure() 
ax = pl.subplot(111) 
width=0.8 
ax.bar(range(len(dates)), values, width=width) 
ax.set_xticks(np.arange(len(dates)) + width/2) 
ax.set_xticklabels(dates, rotation=90) 
+0

यह बहुत अच्छा है लेकिन अक्ष एक्स पर लेबल को अधिक लंबवत पर सेट करने का कोई तरीका है चित्र? अक्ष एक्स पर बहुत सारे डेटा के साथ यह अच्छा नहीं लगेगा। लेकिन धन्यवाद, मैं निश्चित रूप से आपके उदाहरण का उपयोग करूंगा :) – mazix

+0

रोटेशन कोण बदलें। – Bruno

+0

धन्यवाद :) बस एक और बात: प्रत्येक बिन के नीचे बस उन तारीख-लेबल को कैसे सेट करें? मैंने विभिन्न घूर्णन कोण के साथ प्रयास किया लेकिन यह पर्याप्त नहीं है: http://s6.ifotos.pl/img/chartpng_raqrsaq.png – mazix

4

सबसे पहले, क्या आप देख रहे हैं एक स्तंभ या बार आरेख, नहीं वास्तव में एक हिस्टोग्राम है। एक हिस्टोग्राम एक निरंतर परिवर्तनीय आवृत्ति वितरण से बना होता है जिसे डिब्बे में विभाजित किया जाता है। यहां आपके पास अलग-अलग लेबल के खिलाफ एक कॉलम है।

matplotlib के साथ एक बार आरेख बनाने के लिए, matplotlib.pyplot.bar() विधि का उपयोग करें। Matplotlib दस्तावेज के this page पर एक नज़र डालें जो उदाहरणों के साथ बहुत अच्छी तरह से बताता है और source code इसे कैसे करें।

यदि यह संभव है, तो मैं सुझाव दूंगा कि इस तरह के एक साधारण कार्य के लिए यदि आप कोड लिखने से बच सकते हैं जो बेहतर होगा। यदि आपके पास कोई स्प्रेडशीट प्रोग्राम है तो यह केक का एक टुकड़ा होना चाहिए क्योंकि यह वही है जो वे हैं, और आपको 'व्हील को फिर से शुरू करना' नहीं होगा। निम्नलिखित एक्सेल में अपने डेटा की साजिश है:

Bar diagram plot in Excel

मैं सिर्फ सवाल से अपने डेटा की नकल की, दो कॉलम में यह डाल करने के लिए पाठ आयात विज़ार्ड का इस्तेमाल किया तो मैं एक स्तंभ चित्र सम्मिलित किया गया।

+2

अपने जवाब के लिए धन्यवाद, लेकिन मैं अजगर में यह क्या करना है। – mazix

+7

यह पहिया को पुनर्निर्मित नहीं कर रहा है, यह एक अलग उपकरण का उपयोग कर रहा है। अपने तर्क का प्रयोग करना सीखने में कोई बात नहीं होगी कि matplotlib में लाइन ग्राफ़ कैसे आकर्षित करें क्योंकि आप इसे एक्सेल – Anake

+2

में कर सकते हैं "अगर आप कोड लिखने से बच सकते हैं जो बेहतर होगा।" क्यूं कर? मैं कल्पना नहीं कर सकता कि एसओ पर कई लोग उस कथन से सहानुभूति रखते हैं। – dbliss

24

यह कोड जो आप खोज रहे हैं वह करेगा। यह here और here उदाहरणों पर आधारित है।

autofmt_xdate() कॉल एक्स-अक्ष लेबल पढ़ने योग्य बनाने के लिए विशेष रूप से उपयोगी है।

import numpy as np 
from matplotlib import pyplot as plt 

fig = plt.figure() 

width = .35 
ind = np.arange(len(OY)) 
plt.bar(ind, OY, width=width) 
plt.xticks(ind + width/2, OX) 

fig.autofmt_xdate() 

plt.savefig("figure.pdf") 

enter image description here

+0

'चौड़ाई = 0.75' बेहतर काम करता है। सलाखों के बीच में xticks डालता है – dreme

+2

'ind = np.arange (लेन (ओवाई)) नाम त्रुटि: नाम 'ओवाई' परिभाषित नहीं किया गया है ' – manetsus

संबंधित मुद्दे