快速绘制K线图
Pandas是金融领域非常好用且高效的数据分析与处理模块。
import plotly as py
import plotly.graph_objs as go
pyplt=py.offline.plot
import pandas as pd
df=pd.read_csv(r'C:/Users/daasda/Desktop/py语言/《基于plotly的动态可视化绘图》数据/Chapter05/dat/appl.csv',
index_col=['date'],parse_dates=['date'])
trace=go.Ohlc(
x=df.index,
open=df.open,
high=df.high,
low=df.low,
close=df.close
)
data=[trace]
pyplt(data,filename=r'OHLC(美国线)图.html')
结果:
快速绘制蜡烛图
import plotly as py
import plotly.graph_objs as go
pyplt=py.offline.plot
import pandas as pd
df=pd.read_csv(r'C:/Users/daasda/Desktop/py语言/《基于plotly的动态可视化绘图》数据/Chapter05/dat/appl.csv',
index_col=['date'],parse_dates=['date'])
trace=go.Candlestick(
x=df.index,
open=df.open,
high=df.high,
low=df.low,
close=df.close
)
data=[trace]
pyplt(data,filename=r'蜡烛图.html')
结果:
以上两种函数虽然效果不错,但是却有一个致命的缺陷,那就是绘图结果中包含了所有的日期信息,包括非交易日。
K线图的优化
过滤非交易时间
这属于对X轴进行操作,需要在布局管理中进行。
import plotly as py
import plotly.graph_objs as go
pyplt=py.offline.plot
import pandas as pd
df=pd.read_csv(r'C:/Users/daasda/Desktop/py语言/《基于plotly的动态可视化绘图》数据/Chapter05/dat/appl.csv',
index_col=['date'],parse_dates=['date'])
trace=go.Ohlc(
x=df.index,
open=df.open,
high=df.high,
low=df.low,
close=df.close
)
data=[trace]
layout=go.Layout(xaxis=go.XAxis(autorange=True,
mirror='all',
gridcolor='rgb(180,180,180)',
showline=True,#画出x轴
showgrid=True,
tickangle=-60,
categoryorder="category ascending",
type='category'),#把x轴的元素看成是分类的元素,并对其进行升序排序
yaxis=go.YAxis(
autorange=True,
gridcolor='rgb(180,180,180)'
))
fig=go.Figure(data=data,layout=layout)
pyplt(fig,filename=r'K线图优化(过滤非交易时间).html')
注:最重要的代码categoryorder="category ascending", type='category'
意思是把x轴的元素看成分类的元素,并对其进行升序排序。既然元素的属性为类别,不是时间,那么就不存在过滤非交易时间的问题了。
结果:
设置颜色、形状、注释
import plotly as py
import plotly.graph_objs as go
import pandas as pd
fig = go.Figure()
# -------------pre def
pyplt = py.offline.plot
df=pd.read_csv(r'C:/Users/daasda/Desktop/py语言/《基于plotly的动态可视化绘图》数据/Chapter05/dat/appl.csv',
index_col=['date'],parse_dates=['date'])
trace = go.Candlestick(x=df.index,
open=df.open,
high=df.high,
low=df.low,
close=df.close,
increasing=dict(line=dict(color='#FF0000')),
decreasing=dict(line=dict(color='#0C05F9'))
)
data = [trace]
layout=go.Layout({
'xaxis': {
'showline': True, # 画出 X 轴那条线
'tickangle': -60,
'categoryorder': "category ascending",
'type': 'category'},
'title': '苹果公司K线图',
'yaxis': {'title': '股票价格'},
'shapes': [{
'x0': '2016-08-22', 'x1': '2016-10-05',
'y0': 0, 'y1': 1, 'xref': 'x', 'yref': 'paper',
'line': {'color': 'rgb(30,30,30)', 'width': 2}
}],
'annotations': [{
'x': '2016-09-12', 'y': 0.05, 'xref': 'x', 'yref': 'paper',
'showarrow': True, 'xanchor': 'left',
'text': '区间最低价'
}]
})
fig=go.Figure(data=data,layout=layout)
pyplt(fig, filename=r'设置了颜色等的蜡烛图.html')
结果: