Я пытаюсь показать данные о цене акций в tableWidget вместе с графиком Matplotlib. я создал mainWindow в qtDesigner с tableWidget и другим виджетом, повышенным до MplWidget, и создал класс MplWidget для холста matplotlib. и я использовал Pandas для данных. работает нормально. теперь я хочу сделать ...
пока я запускаю мою программу, холст matplotlib уже появляется (без данных), который я не хочу показывать. Он будет пустым.
при наведении указателя мыши с данными (дата, цена) с линией сетки (горизонтальной и вертикальной). Линия сетки будет появляться только при наведении курсора мыши на график (как показано на рисунке). я использовал 'mplcursor', но не получил, который я точно искал
Все даты показаны по оси X, я не могу установить частоту дат. я попытался с 'xticks', но, возможно, я делаю это неправильно.
mainWindow.py
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QMenu
from design import Ui_MainWindow
from eventHandler import *
import datetime
from mplwidget import MplWidget
import numpy as np
import matplotlib
matplotlib.use('Qt5Agg')
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg
from matplotlib.figure import Figure
import random
import pandas as pd
import numpy as np
import pandas.io.sql as psql
import pyodbc
import mplcursors
class MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.pushButton.clicked.connect(self.securitycall)
self.show()
def securitycall(self):
# function call from eventHandler and data retrive from MSSQL SERVER
# show data in tableWidget
# variable df is the price dataset using pandas
df=pd.read_sql(sql,conn)
print(df["priceDate"])
t=df["priceDate"]
p=df["price"]
self.MplWidget.canvas.axes.clear()
# background color-------
# self.MplWidget.canvas.axes.set_facecolor((1.0, 0.47, 0.42))
# plot color-------------
self.MplWidget.canvas.axes.plot(t, p,color='deepskyblue', linewidth=0.7)
# x-labels vertical------------
self.MplWidget.canvas.axes.set_xticklabels(labels=t, rotation=90)
self.MplWidget.canvas.axes.tick_params(axis='x', which='major', labelsize=9,color='deepskyblue')
# canvas border color-------------
self.MplWidget.canvas.axes.spines['bottom'].set_color('deepskyblue')
self.MplWidget.canvas.axes.spines['top'].set_color('deepskyblue')
self.MplWidget.canvas.axes.spines['right'].set_color('deepskyblue')
self.MplWidget.canvas.axes.spines['left'].set_color('deepskyblue')
# grid view--------------------
# self.MplWidget.canvas.axes.grid(True, lw ='.2', ls = '--', c = '.1')
#labels--------------
self.MplWidget.canvas.axes.set_xlabel('Date')
self.MplWidget.canvas.axes.set_ylabel('Prices')
# Annotate on hover with grid line show------------
mplcursors.cursor(hover=True)
self.MplWidget.canvas.axes.legend(('cosinus'),loc='upper right')
self.MplWidget.canvas.axes.set_title('STOCK PRICES')
self.MplWidget.canvas.draw()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
mplWidget.py
from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
class MplWidget(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure())
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
# self.canvas.hide()
self.setLayout(vertical_layout)