2017-09-09 3 views
0

私はインターネット上でExcelファイルをダウンロードしています。ファイルには、次のようになります。matplotlibローソク足画像の正しい日時係数を解析する方法

> 2017-08-01 00:00 1269.50000 1269.70000 1269.50000 1269.670000 
> 2017-08-01 00:01 1269.690000 1269.70000 1269.650000 1269.670000 
> 2017-08-01 00:02 1269.680000 1269.690000 1269.650000 1269.670000 
> 2017-08-01 00:03 1269.650000 1269.70000 1269.650000 1269.680000 
> 2017-08-01 00:04 1269.660000 1269.70000 1269.560000 1269.630000 
> 2017-08-01 00:05 1269.650000 1269.680000 1269.620000 1269.660000 
> 2017-08-01 00:06 1269.670000 1269.690000 1269.640000 1269.660000 
> 2017-08-01 00:07 1269.680000 1269.680000 1269.540000 1269.580000 
> 2017-08-01 00:08 1269.570000 1269.60000 1269.540000 1269.550000 
> 2017-08-01 00:09 1269.570000 1269.590000 1269.540000 1269.570000 

最初私はnumpy.array filestyleにファイルをロードします。 それは次のようになります。matplotlib.candelstick_ohlcコマンドは、関数datenumフォーマットをサポートしているため

array([[Timestamp('2017-07-02 22:01:00'), 1241.65, 1241.85, 1241.63, 
     1241.85], 
     [Timestamp('2017-07-02 22:02:00'), 1241.95, 1241.95, 1241.85, 
     1241.95], 
     [Timestamp('2017-07-02 22:03:00'), 1242.05, 1242.15, 1242.05, 
     1242.15], 
     ..., 
     [Timestamp('2017-07-31 23:57:00'), 1267.49, 1267.67, 1267.45, 
     1267.63], 
     [Timestamp('2017-07-31 23:58:00'), 1267.65, 1267.67, 1267.4, 1267.56], 
     [Timestamp('2017-07-31 23:59:00'), 1267.55, 1267.55, 1267.36, 
     1267.43]], dtype=object) 

、私は[変換しますこの中0]カラム:このコマンドは、no行ったよう

array([[736512.9173611111, 1241.65, 1241.85, 1241.63, 1241.85], 
     [736512.9180555556, 1241.95, 1241.95, 1241.85, 1241.95], 
     [736512.91875, 1242.05, 1242.15, 1242.05, 1242.15], 
     ..., 
     [736541.9979166667, 1267.49, 1267.67, 1267.45, 1267.63], 
     [736541.9986111111, 1267.65, 1267.67, 1267.4, 1267.56], 
     [736541.9993055556, 1267.55, 1267.55, 1267.36, 1267.43]], dtype=object) 

、私はローソク足画像をプロットするためにmatplotlib.candlestick_ohlcを使用しますが、結果は良好ではない、に見えます日付を正確に解析するだけでなく(X軸には表示できませんが、XYグラフの右の位置にデータをマップすることはできません)、画像全体が質量になります。 image1 can not find even a single symbol

その後、私は、ファイルから情報C、O、H、Lを分割しmatplotlib.candlestick2_ohlcを使用し、それが動作することができ

しかしため、コマンドの時間因子を含まないものを持っていない、このような画像:どの image2 overview image. it can expand to detail which can show one candlestick

(1)正しいdatetimeを解析するためにmatplotlib.candlestick_ohlcを使用して、XYグラフの正しい位置に情報をマップできるようにする;(2)matplotlib.candlestick2_ohlcを使用して時間を追加するそれを考慮する。 このように私のコード:

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import datetime as dt 
import matplotlib.finance as fin 
import matplotlib as mpl 

df_data=pd.read_excel('HSI.xlsx') 
candle_1=df_data.values 

for record in candle_1: 
    record[0]=mpl.dates.date2num(np.datetime64(record[0]).astype(dt.datetime)) 

t=df_data.iloc[:,0] 
o=df_data.iloc[:,1] 
h=df_data.iloc[:,2] 
l=df_data.iloc[:,3] 
c=df_data.iloc[:,4] 

fig,ax1=plt.subplots() 

##市场数据图表实现 
fin.candlestick_ohlc(ax1,candle_1,colorup='r', colordown='g', alpha=0.75,width=0.4) 
plt.style.use('ggplot') 
plt.show() 

と別のはほんの少しの変更:

fin.candlestick2_ohlc(ax1,o,h,l,c,colorup='r', colordown='g', alpha=0.75,width=0.4) 

私は絵にcandlestick2_ohlcコマンドを使用しますが、このコマンドには、時間的要素がありません右の燭台の画像:

+0

タイムスタンプが(何))、これは完全なコードですか? – Vincenzooo

+0

時間データの1つのフォーマット –

+0

ありがとう、私はそれを得た、私はあなたがそれを見つけるのですか?私はそれを知らずにあなたのコードを再現することはできませんし、datetimeまたはnumpyでそれを見つけることができません。どこからインポートしますか? – Vincenzooo

答えて

0

これを試すことができます:

ax1.xaxis_date() #convert x axis labels to date 
#you can rotate the labels following last line of next code segment 
plt.draw() 

特定のフォーマットや間隔、あなたはここで例に従うと、あなたのケースにそれを調整することができます。 http://matplotlib.org/examples/pylab_examples/finance_demo.html このような何か:データファイルを取得した後

from matplotlib.dates import DateFormatter, WeekdayLocator,DayLocator, MONDAY 

mondays = WeekdayLocator(MONDAY)  # major ticks on the mondays 
alldays = DayLocator()    # minor ticks on the days 
weekFormatter = DateFormatter('%b %d') # e.g., Jan 12 
dayFormatter = DateFormatter('%d')  # e.g., 12 

ax1.xaxis.set_major_locator(mondays) 
ax1.xaxis.set_minor_locator(alldays) 
ax1.xaxis.set_major_formatter(weekFormatter) 

plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment='right') 

(ここからDAT_XLSX_XAUUSD_M1_201708.xlsxテスト目的のために最初の109行に短縮

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import datetime as dt 
import matplotlib.finance as fin 
import matplotlib as mpl 

df_data=pd.read_excel('HSI_test.xlsx') 
candle_1=df_data.values 

for record in candle_1: 
    record[0]=mpl.dates.date2num(np.datetime64(record[0]).astype(dt.datetime)) 

fig,ax1=plt.subplots() 

fin.candlestick_ohlc(ax1,candle_1,colorup='r', colordown='g', alpha=0.75,width=0.4) 
plt.style.use('ggplot') 
ax1.xaxis_date() #convert x axis labels to date 
plt.show() 

と結果: enter image description here

+0

残念ながら、動作しません。 ax1.xaxis_date()は、strラベルをdateformatに変換するために使用されていると思いますか?燭台のコードが正しい日付のラベルを解析していない可能性があります。また、candlestick2は、xaxisのラベルを追加しないだけで、データを連続してランク付けします。 xlsxファイルをアップロードする方法が見つかりません。私はデータファイル(http://www.histdata.com/download-free-forex-historical-data/?/excel/1-minute-bar-quotes/XAUUSD)をダウンロードするインターネットウェブに貼り付けます。この問題の解決方法を知りたい場合は、web.thxでファイルをダウンロードすることができます。 –

+0

ファイルをありがとう、確かに私は今あなたのコードを再現することができます。プロットが行われた後は、とにかくmatplotlibで処理しなければならないので、燭台によって作成されたものであれば問題ありません(私は最初のものを使用してcandlestick2を無視しました。 plt.draw()(またはshow)でプロットを更新していて、プロットが更新されるのを待っていますか? – Vincenzooo

+0

xaxis_date()は私にとっても新しく、私は実際にそれを見つけたが、それがどのように機能するかは不明でしたが、明らかに必要なのは、xデータが日付形式であり、など。 – Vincenzooo

関連する問題