python有没有什么工具包能提高画图时间?我现在用的是mplfinance

我用python3.8做量化,每个品种大概200以内行数,大概2000次循环

计算因子已经从20分钟提高到19秒,用的是mplfinance包保存图片,感觉现在保存图片是我的程序的最大瓶颈。

请问,有哪些Python 包可以快速保存图片?或者把因子计算好,存盘后,用什么python包能在查询数据的时候快速生成图片?

频繁的 “创建→清除” 会拖慢你的代码运行速度的。只创建一个 figure 对象,在画下一个图之前,使用 plt.clf() 清理掉 axes,这样可以复用 figure

import tushare as ts
import mplfinance as mpf
import matplotlib as mpl  # 用于设置曲线参数
from cycler import cycler  # 用于定制线条颜色
import pandas as pd  # 导入DataFrame数据
from time import time
# import talib
import os
import shutil
import matplotlib.pyplot as plt
import datetime
import numpy as np

def Save_picture(df, path, end_date, count, symbol, d_month, futures_model, lines):
    start = time()
    df = pd.DataFrame.from_records(df, index=pd.to_datetime(df['trade_date']))
    # df=df[['trade_date','open','high','low','close','oi'] + lines].reset_index(drop=True)
    df.rename(
        columns={
            'trade_date': 'Date', 'open': 'Open',
            'high': 'High', 'low': 'Low',
            'close': 'Close', 'oi': 'Volume'},
        inplace=True)

    # 设置基本参数
    # type:绘制图形的类型,有candle, renko, ohlc, line等
    # 此处选择candle,即K线图
    # mav(moving average):均线类型,此处设置7,30,60日线
    # volume:布尔类型,设置是否显示成交量,默认False
    # title:设置标题
    # y_label:设置纵轴主标题
    # y_label_lower:设置成交量图一栏的标题
    # figratio:设置图形纵横比
    # figscale:设置图形尺寸(数值越大图像质量越高)

    # 设置marketcolors
    # up:设置K线线柱颜色,up意为收盘价大于等于开盘价
    # down:与up相反,这样设置与国内K线颜色标准相符
    # edge:K线线柱边缘颜色(i代表继承自up和down的颜色),下同。详见官方文档)
    # wick:灯芯(上下影线)颜色
    # volume:成交量直方图的颜色
    # inherit:是否继承,选填
    mc = mpf.make_marketcolors(
        up='red',
        down='#54ffff',
        edge='i',
        wick='i',
        volume='in',
        inherit=True)

    # 设置图形风格
    # gridaxis:设置网格线位置
    # gridstyle:设置网格线线型
    # y_on_right:设置y轴位置是否在右
    s = mpf.make_mpf_style(
        gridaxis='both',
        facecolor='black',
        gridstyle='-.',
        y_on_right=False,
        marketcolors=mc)

    # 设置均线颜色,配色表可见下图
    # 建议设置较深的颜色且与红色、绿色形成对比
    # 此处设置七条均线的颜色,也可应用默认设置
    mpl.rcParams['axes.prop_cycle'] = cycler(
        # color=['white', 'yellow',
        #        '#ff00ff'])
        color=['white', 'yellow',
               '#ff00ff', '#00ff00', '#c0c0c0', 'darkorange',
               'indigo'])
    # 设置线宽
    mpl.rcParams['lines.linewidth'] = 1

    kwargs = dict(
        type='candle',
        #    	mav=(5, 21 ),
        volume=True,
        title='\nStock_index_futures %s candle_line (%s),d_month: %s, enddate:%s' % (
        symbol, futures_model, d_month, end_date),
        ylabel='Candles',
        ylabel_lower='oi',
        figratio=(15, 10),
        figscale=1.5)
    add_plot = mpf.make_addplot(df[lines], secondary_y=False)

    # 图形绘制
    # 绘制ema
    # show_nontrading:是否显示非交易日,默认False
    # savefig:导出图片,填写文件名及后缀
    mpf.plot(df,
             **kwargs,
             addplot=add_plot,
             style=s,
             show_nontrading=False,
             savefig=path + '\\%03d_%s_%s_candle_line' % (count, symbol, futures_model) + '.jpg')

    #    是否显示图像
    #    plt.show()
    plt.close('all')
    stop = time()
    global savepicturetime
    savepicturetime = savepicturetime + stop - start
    return

数据量大的话用pandas模块,真的很好用的,你可以学一学

pyecharts+qt5貌似感觉不错,我先试试