吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1386|回复: 7
收起左侧

[求助] Pyecharts K线图

  [复制链接]
lizy169 发表于 2021-12-7 20:23
25吾爱币
哪位大神有这方面的教程?
最好是视频

官网的https://05x-docs.pyecharts.org/#/zh-cn/charts_base
这个是不是旧版本的?我参考起来不对,我用的是python

这个网的代码能用,但我改起来很吃力,出来的图表的空白的https://gallery.pyecharts.org/#/Candlestick/professional_kline_brush

我想实现的上面是K线图,下面类似成交量的柱形图,
一天对应两根柱子或三根柱子的并列在一起,比如实现上午的成交量和下午的成交量各一根柱子,


最好具有鼠标能放大缩小和左右移动功能


最佳答案

查看完整内容

直接plotly [mw_shl_code=python,true]import plotly.graph_objects as go import pandas as pd df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv') fig = go.Figure(data=[go.Candlestick(x=df['Date'], open=df['AAPL.Open'], high=df['AAPL.High'], low=df['AAPL.Low'], close=df['AAPL.Close']) ]) ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

arryboom 发表于 2021-12-7 20:23
直接plotly
[Python] 纯文本查看 复制代码
import plotly.graph_objects as go
import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')

fig = go.Figure(data=[go.Candlestick(x=df['Date'],
                open=df['AAPL.Open'], high=df['AAPL.High'],
                low=df['AAPL.Low'], close=df['AAPL.Close'])
                     ])

fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lizy169 + 1 + 1 谢谢@Thanks!

查看全部评分

cnct2021 发表于 2021-12-8 07:47
 楼主| lizy169 发表于 2021-12-12 15:47
我自己摸出来了,
鼠标滚轮可以放大缩小,下边移动条可以左右拉动
论坛没办法上动图,就截屏出来看看
有兴趣的可以相互交流

屏幕截图 2021-12-12 154038.png
jintao1989a 发表于 2022-1-9 15:34
lizy169 发表于 2021-12-12 15:47
我自己摸出来了,
鼠标滚轮可以放大缩小,下边移动条可以左右拉动
论坛没办法上动图,就截屏出来看看

求大神给个打包的,我不会编程
 楼主| lizy169 发表于 2022-1-9 19:32
jintao1989a 发表于 2022-1-9 15:34
求大神给个打包的,我不会编程

你要有原始数据才行,至少要日线数据,自己能倒入数据,K线图的源码我可以给你,年前有点忙,空了我找一个免费数据源,做好后一起打包给你们
 楼主| lizy169 发表于 2022-1-9 21:03
import baostock as bs
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Kline, Grid, Line, Bar

code = "sh.603335"
start_date = '2021-11-01'
end_date = '2021-12-03'

#### 登陆系统 ####
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond  error_msg:' + lg.error_msg)

#### 获取沪深A股历史K线数据 ####
# 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。
# 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag
# 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg
rs = bs.query_history_k_data_plus(code,
                                  "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST",
                                  start_date=start_date, end_date=end_date,
                                  frequency="d", adjustflag="3")
print('query_history_k_data_plus respond error_code:' + rs.error_code)
print('query_history_k_data_plus respond  error_msg:' + rs.error_msg)

#### 打印结果集 ####
data_list = []
while (rs.error_code == '0') & rs.next():
    # 获取一条记录,将记录合并在一起
    data_list.append(rs.get_row_data())
result = pd.DataFrame(data_list, columns=rs.fields)
# print(result.dtypes)
# exit()
result['当日振幅'] = (pd.to_numeric(result['high']) - pd.to_numeric(result['low'])) / pd.to_numeric(result['low']) * 100

#### 结果集输出到csv文件 ####
# result.to_csv("D:\\history_A_stock_k_data.csv", index=False)
# print(result)

#### 登出系统 ####
bs.logout()
x_line = result['date'].tolist()  # 列表
k_oclh = result[['open', 'close', 'low', 'high']].values.tolist()  # 获取K线数据转换成列表
# K线主图
kline = (
    Kline()
        .add_xaxis(x_line)
        .add_yaxis(code, k_oclh)
        .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True, ),  # is_show=False
        yaxis_opts=opts.AxisOpts(
            is_scale=True,
            splitarea_opts=opts.SplitAreaOpts(
                is_show=True, areastyle_opts=opts.AreaStyleOpts(opacity=1)
            ),
        ),

        datazoom_opts=[  # 两个zoom可以起到上下两张图都能控制缩放,否则只有最上面的一张图控制缩放
            opts.DataZoomOpts(is_show=False, type_="inside", xaxis_index=[0, 1, 2]),
            opts.DataZoomOpts(is_show=True, type_="slider", xaxis_index=[0, 1, 2]),
            opts.DataZoomOpts(is_show=True, type_="slider", xaxis_index=[0, 1, 2], pos_top="98%"),
        ],
        title_opts=opts.TitleOpts(title='爿θ垲垲'),
        tooltip_opts=opts.TooltipOpts(
            trigger="axis",
            is_show=True,
            trigger_on='mousemove|click',
            axis_pointer_type="cross",
            background_color="rgba(245, 245, 245, 0.8)",
            border_width=1,
            border_color="#ccc",
            textstyle_opts=opts.TextStyleOpts(color="#000")),
        axispointer_opts=opts.AxisPointerOpts(  # 坐标轴指示器,上下图十字线连在一起
            is_show=True,  # 默认显示坐标轴指示器
            link=[{"xAxisIndex": "all"}],
            # 不同轴的 axisPointer 可以进行联动,在这里设置。
            # 联动表示轴能同步一起活动。link 是一个数组,其中每一项表示一个 link group,一个 group 中的坐标轴互相联动。
            label=opts.LabelOpts(background_color="#777")),  # 坐标轴指示器的文本标签,坐标轴标签配置项,
    )
)

zf = result['当日振幅'].tolist()
line = (
    Line()
        .add_xaxis(xaxis_data=x_line)
        # .add_yaxis("涨跌幅", zdf, is_connect_nones=True,)
        .add_yaxis("当日振幅", zf, is_connect_nones=True, )
        .set_global_opts(
        xaxis_opts=opts.AxisOpts(is_scale=True, is_show=False),  # 不显示x轴
        title_opts=opts.TitleOpts(title="", subtitle="", pos_top="47%"),
        legend_opts=opts.LegendOpts(pos_top="47%"), )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 隐藏图例标签数字
)

volume = result['volume'].tolist()
bar = (
    Bar()
        .add_xaxis(x_line)
        .add_yaxis("成交量", volume, itemstyle_opts=opts.ItemStyleOpts(color="#F948F7"), )
        .set_global_opts(
        title_opts=opts.TitleOpts(title="", subtitle="", pos_top="70%"),
        legend_opts=opts.LegendOpts(pos_top="72%"), )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))  # 隐藏图例标签数字
)

grid = (
    Grid(init_opts=opts.InitOpts(width="1600px", height="720px", animation_opts=opts.AnimationOpts(animation=False)))
        .add(kline, grid_opts=opts.GridOpts(pos_top="1%", height="42%"))  # bottm为底部距离,top为顶部距离,也可以为百分数
        .add(line, grid_opts=opts.GridOpts(pos_top="48%", height="20%"), )  # height为单个图的高度
        .add(bar, grid_opts=opts.GridOpts(pos_top="70%", height="20%"), )
        # .render('C:/Users/lizy1/Desktop/' + code + "日线图.html")
        .render(code + "日线图.html")
)
print(code + 'K线图_日线图 已完成')

exit()
 楼主| lizy169 发表于 2022-1-9 21:09
上面这个代码是免费在线获取的日线数据,根据自己的需要填写股票代码和对应的日期,就会生成K线图,K线图我只做了当日振幅和成交量,自己复制代码就行了,我用的是pycharm,第一次做自己根据提示安装第三方库,有问题,论坛留言,pyecharts做的图比其它的图要舒服得多
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-24 04:24

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表