2009-08-13 14 views
13
ax.plot_date((dates, dates), (highs, lows), '-') 

मैं वर्तमान में Matplotlib का उपयोग करके वित्तीय उच्च और निम्न स्तर की साजिश के लिए इस आदेश का उपयोग कर रहा हूं। यह बहुत अच्छा काम करता है, लेकिन मैं एक्स-अक्ष में रिक्त स्थान को बाजार डेटा के बिना दिनों तक छोड़ा जा सकता हूं, जैसे कि सप्ताहांत और छुट्टियां?वित्तीय Matplotlib पायथन ग्राफ में खाली तिथियां (सप्ताहांत) कैसे छोड़ें?

मेरे पास तिथियों, उच्च, निम्न, बंद और खुलने की सूचियां हैं। मुझे एक्स-अक्ष के साथ ग्राफ़ बनाने का कोई उदाहरण नहीं मिल रहा है जो तिथियां दिखाता है लेकिन निरंतर पैमाने को लागू नहीं करता है।

उत्तर

4

मुझे लगता है कि आपको तारीखों का प्रतिनिधित्व करने वाले तारों पर टिक लेबल सेट करने के लिए xticks का उपयोग करके इच्छित प्लॉट के सटीक रूप को "कृत्रिम रूप से संश्लेषित" करने की आवश्यकता है (निश्चित रूप से आप जिस तारीखों को समतुल्य अंतराल पर टिक डालते हैं प्रतिनिधित्व समकक्ष नहीं हैं) और फिर एक सादा plot का उपयोग कर रहे हैं।

5

scikits.timeseries की विज्ञापित विशेषताओं में से एक है "बुद्धिमानी से धुरी अक्ष लेबल के साथ समय श्रृंखला प्लॉट बनाएं"।

आप कुछ उदाहरण प्लॉट here देख सकते हैं। पहले उदाहरण में (नीचे दिखाया गया है) डेटा के लिए 'व्यापार' आवृत्ति का उपयोग किया जाता है, जो स्वचालित रूप से छुट्टियों और सप्ताहांत और इसी तरह को छोड़ देता है। यह डेटा प्वाइंट गायब भी मुखौटा करता है, जिसे आप इन साजिश में अंतराल के बजाय, इस साजिश में अंतराल के रूप में देखते हैं।

alt text http://pytseries.sourceforge.net/_images/yahoo.png

5

मैं आम तौर पर प्रयोग करेंगे मानों अवैध या मौजूद नहीं हैं के लिए NumPy के NaN (नहीं एक नंबर)। उन्हें प्लॉट में अंतराल के रूप में Matplotlib द्वारा प्रतिनिधित्व किया जाता है और NumPy pylab/Matplotlib का हिस्सा है।

>>> import pylab 
>>> xs = pylab.arange(10.) + 733632. # valid date range 
>>> ys = [1,2,3,2,pylab.nan,2,3,2,5,2.4] # some data (one undefined) 
>>> pylab.plot_date(xs, ys, ydate=False, linestyle='-', marker='') 
[<matplotlib.lines.Line2D instance at 0x0378D418>] 
>>> pylab.show() 
0

तारीख जवाब (2018) matplotlib 2.1.2 के साथ अप करने के लिए, अजगर 2.7.12

फ़ंक्शन equidate_ax डेटा बिंदुओं के समतुल्य अंतर के साथ एक साधारण तिथि x-axis के लिए आपको जो कुछ भी चाहिए, उसे संभालता है। this example पर आधारित ticker.FuncFormatter के साथ समझा गया।

from __future__ import division 
from matplotlib import pyplot as plt 
from matplotlib.ticker import FuncFormatter 
import numpy as np 
import datetime 


def equidate_ax(fig, ax, dates, fmt="%Y-%m-%d", label="Date"): 
    """ 
    Sets all relevant parameters for an equidistant date-x-axis. 
    Tick Locators are not affected (set automatically) 

    Args: 
     fig: pyplot.figure instance 
     ax: pyplot.axis instance (target axis) 
     dates: iterable of datetime.date or datetime.datetime instances 
     fmt: Display format of dates 
     label: x-axis label 
    Returns: 
     None 

    """  
    N = len(dates) 
    def format_date(index, pos): 
     index = np.clip(int(index + 0.5), 0, N - 1) 
     return dates[index].strftime(fmt) 
    ax.xaxis.set_major_formatter(FuncFormatter(format_date)) 
    ax.set_xlabel(label) 
    fig.autofmt_xdate() 


# 
# Some test data (with python dates) 
# 
dates = [datetime.datetime(year, month, day) for year, month, day in [ 
    (2018,2,1), (2018,2,2), (2018,2,5), (2018,2,6), (2018,2,7), (2018,2,28) 
]] 
y = np.arange(6) 


# Create plots. Left plot is default with a gap 
fig, [ax1, ax2] = plt.subplots(1, 2) 
ax1.plot(dates, y, 'o-') 
ax1.set_title("Default") 
ax1.set_xlabel("Date") 


# Right plot will show equidistant series 
# x-axis must be the indices of your dates-list 
x = np.arange(len(dates)) 
ax2.plot(x, y, 'o-') 
ax2.set_title("Equidistant Placement") 
equidate_ax(fig, ax2, dates) 

Comparison of default plotting method and equidistant x-axis

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