2017-06-20 108 views
0

我想用matplotlib开发烛台图表,但由于某些原因,日期不会在x轴上显示。在stackoverflow搜索后,我明白日期需要转换为浮点数,所以我转换它们,但仍然无法正常工作。新的Python和matplotlib。任何帮助将不胜感激。如何在matplotlib x轴中显示日期而不是序号

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.finance import candlestick2_ohlc 
import matplotlib.dates as dts 
import matplotlib.ticker as mTicker 
from datetime import datetime 
my_file=pd.read_csv("C:\\path\\to\\file\\file.csv",sep=",",names=['Date','Open','High','Low','Close','AdjClose','Volume'],skiprows=1) 
dateseries=[] 
for i in my_file['Date']: 
    dateseries.append(dts.date2num(datetime.strptime(i,'%Y-%m-%d'))) 
print(dateseries) 
fig,ax1=plt.subplots() 
candlestick2_ohlc(ax1,my_file['Open'], my_file['High'],my_file['Low'],  my_file['Close'], width=0.7,colorup='#008000', colordown='#FF0000') 
plt.show() 

的样本数据:

Date,Open,High,Low,Close,Volume1,Volume2 
2017-05-08,149.029999,153.699997,149.029999,153.009995,153.009995,48752400 
2017-05-09,153.869995,154.880005,153.449997,153.990005,153.990005,39130400 
2017-05-10,153.630005,153.940002,152.110001,153.259995,153.259995,25805700 
+0

您需要设置“日期”,以大熊猫数据帧索引。加载文件后,请尝试: my_file = my_file.set_index('Date')。不需要日期系列的东西。 –

+0

感谢评论@Geoff。我试着将日期设置为索引,但它不起作用 – Yogamurthy

回答

0

一般情况下,你说得对,“日期需要转换到浮点数”。然后要在x轴上显示日期,您需要将它们“转换”回来。如果你不介意使用candlestick_ohlc,这可能是在这里设置x轴的情况下更容易:

import io 

import matplotlib.pyplot as plt 
from matplotlib.finance import candlestick_ohlc 
from matplotlib.dates import date2num, DayLocator, DateFormatter 
import pandas as pd 

s = """Date,Open,High,Low,Close,Volume1,Volume2 
2017-05-08,149.029999,153.699997,149.029999,153.009995,153.009995,48752400 
2017-05-09,153.869995,154.880005,153.449997,153.990005,153.990005,39130400 
2017-05-10,153.630005,153.940002,152.110001,153.259995,153.259995,25805700""" 
my_file = pd.read_table(io.StringIO(s), sep=',', header=0) 

my_file['Date'] = date2num(pd.to_datetime(my_file['Date']).tolist()) 

fig, ax=plt.subplots() 
candlestick_ohlc(ax, my_file.as_matrix()) 
ax.xaxis.set_major_locator(DayLocator()) 
ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d')) 
plt.show() 

enter image description here

+0

非常感谢。当我到家时,让我试试这个。 – Yogamurthy

相关问题