踏实可靠陆先生 2024-06-27 21:01 采纳率: 0%
浏览 41

使用Pyqt界面绘制股票的K线图

使用pyqt做一个界面,填入股票的代号以及区间时间,可以绘制股票的K线图
我的代码如下,问题是如何将使用Mpf库绘制的图在qt界面上显示,现在的显示是弹窗显示的

img

下面是我的代码

class MyMainForm(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MyMainForm, self).__init__()
        self.setupUi(self)
        self.pushButton.clicked.connect(self.pushButton_click)
 
    def pushButton_click(self):
        code = str(self.Tcode.text())  # '000008.SZ'
        Start = str(self.Start.text())  # '2021-01'
        End = str(self.End.text())  # '2021-12'
        # 调用函数并传入参数
        from plot_stock_data import plot_stock_candlestick2
        # 调用函数并传入参数
        plot_stock_candlestick2(code, Start, End)


def plot_stock_candlestick2(ts_code, start_date, end_date):
    pro = ts.pro_api(token)
    df = pro.daily(ts_code=ts_code)
    df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]
    df.rename(
        columns={
            'trade_date': 'Date', 'open': 'Open',
            'high': 'High', 'low': 'Low',
            'close': 'Close', 'vol': 'Volume'
        },
        inplace=True
    )
    df['Date'] = pd.to_datetime(df['Date'])
    df.set_index(['Date'], inplace=True)
    df = df.sort_index()
    # 绘制蜡烛图
    #定义一个绘图的格式,就是涨红色,跌是绿色
    mymarketcolors = mpf.make_marketcolors(up='r', down='g', inherit=True)
    mystyle = mpf.make_mpf_style(marketcolors=mymarketcolors)
    print("测试")
    mpf.plot(df.loc[start_date:end_date], type='candle', ylabel="price", style=mystyle,  title=f'{ts_code} {end_date[:4]}_candle_line', mav=(5, 10), volume=True, ylabel_lower="volume(shares)")

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-06-28 09:19
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    在PyQt界面上显示Mpf库绘制的图,可以使用QPixmap将图像转换为QImage,然后再将QImage显示在QLabel中。 以下是修改后的代码:
    from PyQt5.QtCore import Qt
    from PyQt5.QtGui import QPixmap, QImage
    from PyQt5.QtWidgets import QMainWindow
    from mplfinance import make_marketcolors, make_mpf_style, plot
    from ui_mainwindow import Ui_MainWindow
    from utils import ts_pro_api
    class MyMainForm(QMainWindow, Ui_MainWindow):
        def __init__(self):
            super(MyMainForm, self).__init__()
            self.setupUi(self)
            self.pushButton.clicked.connect(self.pushButton_click)
        def pushButton_click(self):
            code = str(self.Tcode.text())  # '000008.SZ'
            Start = str(self.Start.text())  # '2021-01'
            End = str(self.End.text())  # '2021-12'
            # 调用函数并传入参数
            df = plot_stock_candlestick2(code, Start, End)
            # 将Mpf库绘制的图像转换为QPixmap格式
            fig = plot(df, type='candle', ylabel='price',
                       mav=(5, 10), volume=True, ylabel_lower='volume(shares)')
            fig.savefig('tmp.png')
            qimg = QImage('tmp.png')
            pixmap = QPixmap.fromImage(qimg)
            # 在QLabel中显示图像
            self.label.setPixmap(pixmap)
            self.label.setScaledContents(True)
    def plot_stock_candlestick2(ts_code, start_date, end_date):
        # 获取股票数据
        pro = ts_pro_api(token)
        df = pro.daily(ts_code=ts_code)
        df = df.loc[:, ['trade_date', 'open', 'high', 'low', 'close', 'vol']]
        df.rename(
            columns={'trade_date': 'Date', 'open': 'Open', 'high': 'High',
                     'low': 'Low', 'close': 'Close', 'vol': 'Volume'},
            inplace=True
        )
        df['Date'] = pd.to_datetime(df['Date'])
        df.set_index(['Date'], inplace=True)
        df = df.sort_index()
        # 绘制蜡烛图
        mymarketcolors = make_marketcolors(up='r', down='g', inherit=True)
        mystyle = make_mpf_style(marketcolors=mymarketcolors)
        plot(df.loc[start_date:end_date], type='candle', ylabel='price',
             style=mystyle, title=f'{ts_code} {end_date[:4]}_candle_line',
             mav=(5, 10), volume=True, ylabel_lower='volume(shares)')
        return df
    

    其中,需要导入QPixmap、QImage以及ui_mainwindow和utils模块,utils模块中定义了ts_pro_api函数,用于获取股票数据。 最终的界面效果如下图所示: image-20211220114410371

    评论

报告相同问题?

问题事件

  • 创建了问题 6月27日