在Python中绘制数据框中的烛台数据

use*_*258 7 candlestick-chart

我想从使用熊猫从雅虎下载的数据创建每日烛台图.在这种情况下,我无法弄清楚如何使用烛台matplotlib函数.这是代码:

#The following example, downloads stock data from Yahoo and plots it.
from pandas.io.data import get_data_yahoo
import matplotlib.pyplot as plt

from matplotlib.pyplot import subplots, draw
from matplotlib.finance import candlestick

symbol = "GOOG"

data = get_data_yahoo(symbol, start = '2013-9-01', end = '2013-10-23')[['Open','Close','High','Low','Volume']]

ax = subplots()

candlestick(ax,data['Open'],data['High'],data['Low'],data['Close'])
Run Code Online (Sandbox Code Playgroud)

谢谢

安德鲁.

ox.*_*ox. 8

使用散景:

import io
from math import pi
import pandas as pd
from bokeh.plotting import figure, show, output_file

df = pd.read_csv(
    io.BytesIO(
        b'''Date,Open,High,Low,Close
2016-06-01,69.6,70.2,69.44,69.76
2016-06-02,70.0,70.15,69.45,69.54
2016-06-03,69.51,70.48,68.62,68.91
2016-06-04,69.51,70.48,68.62,68.91
2016-06-05,69.51,70.48,68.62,68.91
2016-06-06,70.49,71.44,69.84,70.11
2016-06-07,70.11,70.11,68.0,68.35'''
    )
)

df["Date"] = pd.to_datetime(df["Date"])

inc = df.Close > df.Open
dec = df.Open > df.Close
w = 12*60*60*1000

TOOLS = "pan,wheel_zoom,box_zoom,reset,save"

p = figure(x_axis_type="datetime", tools=TOOLS, plot_width=1000, title
= "Candlestick")
p.xaxis.major_label_orientation = pi/4
p.grid.grid_line_alpha=0.3

p.segment(df.Date, df.High, df.Date, df.Low, color="black")
p.vbar(df.Date[inc], w, df.Open[inc], df.Close[inc], fill_color="#D5E1DD", line_color="black")
p.vbar(df.Date[dec], w, df.Open[dec], df.Close[dec], fill_color="#F2583E", line_color="black")

output_file("candlestick.html", title="candlestick.py example")

show(p)
Run Code Online (Sandbox Code Playgroud)

来自Pandas DataFrame的烛台图

上面的代码从这里分叉:http: //bokeh.pydata.org/en/latest/docs/gallery/candlestick.html


El *_*uso 5

我没有评论@ randall-goodwin的答案,但是对于pandas 0.16.2行:

# convert the datetime64 column in the dataframe to 'float days'
data.Date = mdates.date2num(data.Date)
Run Code Online (Sandbox Code Playgroud)

一定是:

data.Date = mdates.date2num(data.Date.dt.to_pydatetime())
Run Code Online (Sandbox Code Playgroud)

因为matplotlib不支持numpy datetime64 dtype


Ran*_*win 1

当我也在寻找如何将烛台与从 DataReader 服务之一(如 get_data_yahoo)返回的 pandas 数据帧一起使用时,发现了这个问题。我最终想通了。关键之一是另一个问题,由 Wes McKinney 和 RJRyV 回答。这是该链接:

Pandas 将数据帧转换为元组数组

关键是阅读 Candlestick.py 函数定义以确定它期望如何接收数据。首先需要转换日期,然后需要将整个数据帧转换为元组数组。

这是对我有用的最终代码。也许还有其他一些烛台图可以直接在从股票报价服务之一返回的 pandas 数据帧上工作。那肯定很不错。

# Imports
from pandas.io.data import get_data_yahoo
from datetime import datetime, timedelta
import matplotlib.dates as mdates
from matplotlib.pyplot import subplots, draw
from matplotlib.finance import candlestick
import matplotlib.pyplot as plt

# get the data on a symbol (gets last 1 year)
symbol = "TSLA"
data = get_data_yahoo(symbol, datetime.now() - timedelta(days=365))

# drop the date index from the dateframe
data.reset_index(inplace = True)

# convert the datetime64 column in the dataframe to 'float days'
data.Date = mdates.date2num(data.Date)

# make an array of tuples in the specific order needed
dataAr = [tuple(x) for x in data[['Date', 'Open', 'Close', 'High', 'Low']].to_records(index=False)]

# construct and show the plot
fig = plt.figure()
ax1 = plt.subplot(1,1,1)
candlestick(ax1, dataAr)
plt.show()
Run Code Online (Sandbox Code Playgroud)