from pyecharts import options as opts # 全局、系列配置
from pyecharts.charts import Bar, Grid, Line # 柱形图
from pyecharts.globals import ThemeType # 主题风格
from pyecharts.charts import Kline, Line, Bar, Gauge, Pie, Scatter, TreeMap # K线图、线形图、柱状图、仪表盘、饼图、散点图、矩形树图
from pyecharts.charts import Grid, Tab # 组合组件、分页组件
from pyecharts.components import Table # 表格组件
import time # 时间模块
import pandas as pd # Pandas模块
import numpy as np # Numpy模块
from sqlalchemy import create_engine # 数据引擎模块
conn = create_engine('mysql+pymysql://root:test@127.0.0.1:3306/quant_db?charset=utf8') # 创建引擎
#################################################################################################################################
class Module:
'''
1、上证指数、涨跌幅
2、深证指数、涨跌幅
3、创业板指数、涨跌幅
'''
def __init__(self, sql):
self.sql = sql
self.data = pd.read_sql(self.sql, conn)
def func_kline(self, x, y, series, title,title_link,pos_left,**kwargs):
# 数据处理部分
x = self.data['trade_date'].tolist()
y = []
for index, row in self.data.iterrows():
list = [row['open'], row['close'], row['low'], row['high']]
y.append(list)
# K线图绘制
kline = (
Kline(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(x)
.add_yaxis(series, y)
.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True,
areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
# 标题组件配置项
title_opts=opts.TitleOpts(
title=title, # 主标题文本
title_link=title_link, # 主标题跳转url链接,可以为None
pos_left='', # 标题组件离容器左侧的距离,可以为None,具体值,百分比,‘left、right、center’
pos_right='',
pos_top = '',
pos_bottom=''
),
# 图例组件配置项
legend_opts=opts.LegendOpts(
pos_left='', # 图例组件离容器左侧的距离,可以为None,具体值,百分比,‘left、right、center’
pos_right='',
pos_top='',
pos_bottom='',
orient='', # 图例列表的布局朝向。可选:'horizontal', 'vertical'
legend_icon='' # 图例项的 icon。标记类型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
),
# 工具箱组件配置项
toolbox_opts=opts.ToolBoxFeatureSaveAsImagesOpts(
type_='', # 保存的图片格式。支持 'png' 和 'jpeg'。
is_show='', # 是否显示该工具。
title= "保存为图片", # 提示语
),
# 系列提示框配置项
tooltip_opts=opts.TooltipOpts(
)
)
)
)
def func_bar(self, x, y, series, title):
# 柱形图绘制
bar = (
Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
.add_xaxis(x)
.add_yaxis(series, y)
.set_global_opts(
title_opts=opts.TitleOpts(title=title, pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%")
)
)
grid = (
Grid()
.add(kline, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right='50%'))
.add(bar, grid_opts=opts.GridOpts(pos_top="60%"))
# .render("grid_vertical.html")
)
return grid
def func02(self):
# 1、近90日深证指数走势及涨跌幅
data = pd.read_sql(sql, conn)
x = data['trade_date'].tolist()
y1 = []
y2 = data['pct_chg'].tolist()
for index, row in data.iterrows():
list = [row['open'], row['close'], row['low'], row['high']]
print(list)
y1.append(list)
kline = (
Kline()
.add_xaxis(x)
.add_yaxis("深证指数", y1)
.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
title_opts=opts.TitleOpts(title="近90日深证指数走势图"),
)
)
bar = (
Bar()
.add_xaxis(x)
.add_yaxis("深证涨跌幅", y2)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-Brush示例", subtitle="我是副标题", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%")
)
)
grid = (
Grid()
.add(kline, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right='50%'))
.add(bar, grid_opts=opts.GridOpts(pos_top="60%"))
# .render("grid_vertical.html")
)
return grid
def func03(self):
# 1、近90日创业板指数走势及涨跌幅
data = pd.read_sql(sql, conn)
x = data['trade_date'].tolist()
y1 = []
y2 = data['pct_chg'].tolist()
for index, row in data.iterrows():
list = [row['open'], row['close'], row['low'], row['high']]
print(list)
y1.append(list)
kline = (
Kline()
.add_xaxis(x)
.add_yaxis("创业板指数", y1)
.set_global_opts(
xaxis_opts=opts.AxisOpts(is_scale=True),
yaxis_opts=opts.AxisOpts(
is_scale=True,
splitarea_opts=opts.SplitAreaOpts(
is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
),
),
title_opts=opts.TitleOpts(title="近90日创业板指数走势图"),
)
)
bar = (
Bar()
.add_xaxis(x)
.add_yaxis("创业板涨跌幅", y2)
.set_global_opts(
title_opts=opts.TitleOpts(title="Bar-Brush示例", subtitle="我是副标题", pos_top="48%"),
legend_opts=opts.LegendOpts(pos_top="48%")
)
)
def func_grid(self):
grid = (
Grid()
.add(kline, grid_opts=opts.GridOpts(pos_bottom="60%", pos_right='50%'))
.add(bar, grid_opts=opts.GridOpts(pos_top="60%"))
# .render("grid_vertical.html")
)
return grid
def main():
# 上证指数
sql1 = '''
SELECT
trade_date, -- 交易日期
`open`, -- 开盘价
high, -- 最高价
low, -- 最低价
`close`, -- 收盘价
pct_chg -- 涨跌幅
FROM
stock_daily
WHERE
ts_code = '000001.SH'
'''
# 深证指数
sql2 = '''
SELECT
trade_date, -- 交易日期
`open`, -- 开盘价
high, -- 最高价
low, -- 最低价
`close`, -- 收盘价
pct_chg -- 涨跌幅
FROM
stock_daily
WHERE
ts_code = '399001.SH'
'''
# 创业板指数
sql3 = '''
SELECT
trade_date, -- 交易日期
`open`, -- 开盘价
high, -- 最高价
low, -- 最低价
`close`, -- 收盘价
pct_chg -- 涨跌幅
FROM
stock_daily
WHERE
ts_code = '399006.SH'
'''
if __name__ == '__main__':
grid01 = func01()
grid02
tab = Tab()
tab.add(grid01, "bar-example")
# tab.add(line_markpoint(), "line-example")
# tab.add(pie_rosetype(), "pie-example")
# tab.add(grid_mutil_yaxis(), "grid-example")
tab.render("tab_base.html")
print("完成")