欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文教你使用Python繪制絲滑的K線圖

 更新時(shí)間:2025年04月21日 09:14:39   作者:花小姐的春天  
K線圖是將各種股票某一時(shí)間單位內(nèi)的開盤價(jià),收盤價(jià),最高價(jià),最低價(jià),通過繪圖方式表現(xiàn)出來的一種圖形,下面我們來看看如何使用Python實(shí)現(xiàn)絲滑繪制K線圖吧

前段時(shí)間寫了一篇用 pyecharts 繪制 K 線圖的文章,結(jié)果朋友們一個(gè)個(gè)跑來留言——

“花姐,這個(gè)圖咋不全屏?”

“成交量縮放有問題,咋整?”

“有沒有更方便的封裝方式?我想一行代碼就搞定!”

好嘛,大家的愿望就是我改進(jìn)的動(dòng)力!這不,花姐連夜優(yōu)化了一版,并且封裝成一個(gè)類,只要傳入符合格式的 DataFrame 數(shù)據(jù),一行代碼搞定絲滑的 K 線圖,完美支持全屏+縮放!

準(zhǔn)備好?先看看效果,然后咱們開整!

優(yōu)化后的 K 線圖,支持:

? 全屏展示(再也不用擔(dān)心小圖看不清)

? 成交量縮放(精準(zhǔn)掌握市場動(dòng)向)

? 更絲滑的交互體驗(yàn)

這是StockKlineChart.py文件內(nèi)容,繪制K線圖的類,拿來就能用

import pandas as pd
from pyecharts.charts import Kline, Line, Bar, Grid
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

class StockKlineChart:
    def __init__(self, df: pd.DataFrame, stock_code: str):
        """
        初始化 K 線圖表對(duì)象

        :param df: 股票數(shù)據(jù) DataFrame(包含“日期”,“開盤”,“收盤”,“最低”,“最高”,“成交量”)
        :param stock_code: 股票代碼
        """
        self.df = df.sort_values("日期")  # 按日期排序,確保數(shù)據(jù)按時(shí)間順序排列
        self.stock_code = stock_code  # 股票代碼
        self.color_up = "#ef232a"  # 陽線(上漲)顏色
        self.color_down = "#14b143"  # 陰線(下跌)顏色
        self.ma_periods = [5, 10, 20]  # 移動(dòng)平均線周期
        self.ma_colors = {5: "#FF0000", 10: "#0000FF", 20: "#00FF00"}  # 均線顏色

    def _prepare_data(self):
        """ 處理數(shù)據(jù):提取 K 線數(shù)據(jù)、計(jì)算移動(dòng)均線、設(shè)置成交量顏色 """
        self.dates = self.df['日期'].tolist()  # 提取日期列表
        self.kline_data = self.df[["開盤", "收盤", "最低", "最高"]].values.tolist()  # 提取 K 線數(shù)據(jù)

        # 計(jì)算移動(dòng)平均線
        for period in self.ma_periods:
            self.df[f'MA{period}'] = (
                self.df['收盤']
                .rolling(window=period)
                .mean()
                .bfill()  # 處理 NaN 值(前向填充)
                .round(2)  # 保留兩位小數(shù)
            )

        # 計(jì)算成交量顏色標(biāo)記(1: 上漲, -1: 下跌)
        self.df['color'] = self.df.apply(
            lambda x: 1 if x['收盤'] >= x['開盤'] else -1,
            axis=1
        )
        self.df['index_vol'] = range(len(self.df))  # 給成交量數(shù)據(jù)添加索引

    def create_chart(self):
        """ 生成 K 線圖表 """
        self._prepare_data()  # 處理數(shù)據(jù)

        # ================== K 線圖配置 ==================
        kline = (
            Kline()
            .add_xaxis(self.dates)  # 設(shè)置 X 軸日期
            .add_yaxis(
                series_name="K線",  # K 線名稱
                y_axis=self.kline_data,  # K 線數(shù)據(jù)(開盤、收盤、最低、最高)
                itemstyle_opts=opts.ItemStyleOpts(
                    color=self.color_up,  # 陽線顏色
                    color0=self.color_down  # 陰線顏色
                )
            )
            .set_global_opts(
                title_opts=opts.TitleOpts(
                    title="股票K線走勢圖",  # 圖表標(biāo)題
                    subtitle=f"股票代碼:{self.stock_code}",  # 副標(biāo)題
                    pos_left="left"  # 標(biāo)題位置
                ),
                legend_opts=opts.LegendOpts(
                    is_show=True,  # 是否顯示圖例
                    pos_top=10,  # 圖例位置(頂部)
                    pos_left="center"  # 居中對(duì)齊
                ),
                xaxis_opts=opts.AxisOpts(
                    type_="category",  # X 軸類型(類別)
                    axislabel_opts=opts.LabelOpts(rotate=0),  # X 軸標(biāo)簽角度
                    splitline_opts=opts.SplitLineOpts(is_show=True)  # 是否顯示網(wǎng)格線
                ),
                yaxis_opts=opts.AxisOpts(
                    is_scale=True,  # Y 軸是否自適應(yīng)縮放
                    splitarea_opts=opts.SplitAreaOpts(
                        is_show=True,  # 是否顯示網(wǎng)格背景
                        areastyle_opts=opts.AreaStyleOpts(opacity=1)  # 設(shè)置透明度
                    )
                ),
                tooltip_opts=opts.TooltipOpts(
                    trigger="axis",  # 觸發(fā)方式:鼠標(biāo)懸浮時(shí)顯示
                    axis_pointer_type="cross",  # 坐標(biāo)軸指示器類型(十字指示)
                ),
                datazoom_opts=[
                    opts.DataZoomOpts(
                        is_show=False,  # 是否顯示數(shù)據(jù)縮放控件
                        type_="inside",  # 縮放類型:內(nèi)部滑動(dòng)
                        xaxis_index=[0, 1],  # 作用于 X 軸
                        range_start=80,  # 初始顯示范圍
                        range_end=100
                    ),
                    opts.DataZoomOpts(
                        is_show=True,  # 顯示滑動(dòng)條縮放
                        xaxis_index=[0, 1],
                        type_="slider",
                        pos_top="100%",  # 位置:底部
                        range_start=80,
                        range_end=100
                    )
                ],
                # 坐標(biāo)軸指示器
                axispointer_opts=opts.AxisPointerOpts(
                    is_show=True,
                    link=[{"xAxisIndex": "all"}],
                    label=opts.LabelOpts(background_color="#777")
                )
            )
        )

        # ================== 移動(dòng)平均線配置 ==================
        line = Line().add_xaxis(self.dates)
        for period in self.ma_periods:
            line.add_yaxis(
                series_name=f"MA{period}",
                y_axis=self.df[f'MA{period}'].tolist(),
                is_smooth=True,  # 平滑曲線
                symbol="none",  # 取消數(shù)據(jù)點(diǎn)標(biāo)記
                linestyle_opts=opts.LineStyleOpts(
                    color=self.ma_colors[period],  # 顏色
                    width=2  # 線寬
                ),
                label_opts=opts.LabelOpts(is_show=False)  # 隱藏?cái)?shù)據(jù)標(biāo)簽
            )

        # 疊加 K 線和均線
        overlap_kline = kline.overlap(line)

        # ================== 成交量柱狀圖 ==================
        vol_bar = (
            Bar()
            .add_xaxis(self.dates)
            .add_yaxis(
                series_name="成交量",
                y_axis=self.df[['index_vol', '成交量', 'color']].values.tolist(),
                label_opts=opts.LabelOpts(is_show=False),  # 隱藏標(biāo)簽
                
            )
            .set_global_opts(
                xaxis_opts=opts.AxisOpts(
                    type_="category",
                    grid_index=1,
                    axislabel_opts=opts.LabelOpts(is_show=False),
                    axistick_opts=opts.AxisTickOpts(is_show=False),
                    splitline_opts=opts.SplitLineOpts(is_show=False)
                ),
                yaxis_opts=opts.AxisOpts(is_show=False),
                legend_opts=opts.LegendOpts(is_show=False),
                visualmap_opts=opts.VisualMapOpts(
                    is_show=False,
                    dimension=2,  # 顏色映射使用的維度(color)
                    series_index=4,  # 作用于第 5 個(gè)系列(成交量)
                    is_piecewise=True,  # 分段顯示
                    pieces=[
                        {"value": 1, "color": self.color_up},  # 上漲顏色
                        {"value": -1, "color": self.color_down}  # 下跌顏色
                    ]
                )
            )
        )

        # ================== 組合圖表 ==================
        grid = (
            Grid(init_opts=opts.InitOpts(
                width="98vw",
                height="95vh",
                animation_opts=opts.AnimationOpts(animation=False)  # 關(guān)閉動(dòng)畫
            ))
            .add(overlap_kline, grid_opts=opts.GridOpts(pos_top="10%", height="60%" ,pos_left="30px",pos_right="10px"))
            .add(vol_bar, grid_opts=opts.GridOpts(pos_top="73%", height="20%" ,pos_left="30px",pos_right="10px"))
        )

        return grid

    def render(self, file_path: str = "stock_kline.html"):
        """ 渲染并保存 K 線圖 """
        chart = self.create_chart()
        chart.render(file_path)
        print(f"K 線圖已保存為 {file_path}")

這是如何調(diào)用的方法在StockKlineChart.py所在目錄下新建一個(gè)main.py文件

import akshare as ak
import StockKlineChart as skc

# 獲取股票數(shù)據(jù)
df = ak.stock_zh_a_hist(
    symbol="000001",       # 股票代碼
    period="daily",        # 日線數(shù)據(jù)
    start_date="20230101", # 起始日期
    end_date="20251201",   # 結(jié)束日期
    adjust="qfq"           # 前復(fù)權(quán)處理
)

# 創(chuàng)建 K 線圖實(shí)例
stock_chart = skc.StockKlineChart(df=df, stock_code="000001")
stock_chart.render()

運(yùn)行成功以后會(huì)在目錄下生成一個(gè)stock_kline.html文件,用谷歌瀏覽器打開就能看到了。

結(jié)語

好了,文章基本上就寫到這里了,對(duì)于Pyecharts配置有疑問的可以參考下這張圖:

如果你也在用 pyecharts 做可視化,希望這篇文章能幫你少走點(diǎn)彎路!

到此這篇關(guān)于一文教你使用Python繪制絲滑的K線圖的文章就介紹到這了,更多相關(guān)Python繪制K線圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python基于numpy的線性回歸

    python基于numpy的線性回歸

    這篇文章主要為大家詳細(xì)介紹了python基于numpy的線性回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Python 實(shí)現(xiàn)交換矩陣的行示例

    Python 實(shí)現(xiàn)交換矩陣的行示例

    今天小編就為大家分享一篇Python 實(shí)現(xiàn)交換矩陣的行示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python爬蟲指南之xpath實(shí)例解析(附實(shí)戰(zhàn))

    python爬蟲指南之xpath實(shí)例解析(附實(shí)戰(zhàn))

    在進(jìn)行網(wǎng)頁抓取的時(shí)候,分析定位html節(jié)點(diǎn)是獲取抓取信息的關(guān)鍵,目前我用的是lxml模塊,下面這篇文章主要給大家介紹了關(guān)于python爬蟲指南之xpath實(shí)例解析的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Python中join()函數(shù)多種操作代碼實(shí)例

    Python中join()函數(shù)多種操作代碼實(shí)例

    這篇文章主要介紹了Python中join()函數(shù)多種操作代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • python?pycharm中使用opencv時(shí)沒有代碼自動(dòng)補(bǔ)全提示的解決方案

    python?pycharm中使用opencv時(shí)沒有代碼自動(dòng)補(bǔ)全提示的解決方案

    我們?cè)谑褂胮ycharm的時(shí)候總是很喜歡其強(qiáng)大的代碼提示功能,下面這篇文章主要給大家介紹了關(guān)于python?pycharm中使用opencv時(shí)沒有代碼自動(dòng)補(bǔ)全提示的解決方案,需要的朋友可以參考下
    2022-09-09
  • Numpy與Pytorch 矩陣操作方式

    Numpy與Pytorch 矩陣操作方式

    今天小編就為大家分享一篇Numpy與Pytorch 矩陣操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python中in在list和dict中查找效率的對(duì)比分析

    python中in在list和dict中查找效率的對(duì)比分析

    今天小編就為大家分享一篇python中in在list和dict中查找效率的對(duì)比分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • numpy拼接矩陣的實(shí)現(xiàn)

    numpy拼接矩陣的實(shí)現(xiàn)

    本文主要介紹了numpy拼接矩陣的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • python利用拉鏈法實(shí)現(xiàn)字典方法示例

    python利用拉鏈法實(shí)現(xiàn)字典方法示例

    這篇文章主要介紹了python利用拉鏈法實(shí)現(xiàn)字典的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友可以們下面來一起看看吧。
    2017-03-03
  • Python格式化輸出的幾種匯總

    Python格式化輸出的幾種匯總

    這篇文章主要介紹了Python格式化輸出的幾種匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02

最新評(píng)論