目录
效果:
代码:
import sys
import pandas as pd
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from typing import Any,Dict
import pyqtgraph as pg
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
绘制分布直方图控件
class PyQtGraphWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.init_data()
self.init_ui()
def init_data(self):
self.color_bar = (30, 144, 255)
pass
def init_ui(self):
self.title_label = QtWidgets.QLabel('收益率分布图')
self.title_label.setAlignment(Qt.AlignCenter)
self.pw = pg.PlotWidget()
self.pw.setMouseEnabled(x=True, y=False)
# self.pw.enableAutoRange(x=False,y=True)
self.pw.setAutoVisible(x=False, y=True)
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.title_label)
layout.addWidget(self.pw)
self.setLayout(layout)
pass
def set_data(self,data:Dict[str,Any]):
title_str = data['title_str']
x = data['x']
x0 = data['x0']
x1 = data['x1']
y = data['y']
self.title_label.setText(title_str)
barItem = pg.BarGraphItem(x=x,height=y,x0=x0,x1=x1,brush=self.color_bar)
self.pw.addItem(barItem)
self.pw.enableAutoRange()
pass
使用:
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
file_path = r'E:/temp088/600004.csv'
df_004 = pd.read_csv(file_path,encoding='utf-8')
df_004['ret'] = df_004['closePrice'].pct_change()
temp_dis = df_004['ret'].value_counts(bins=200)
x_list = []
x0_list = []
x1_list = []
y_list = []
for index,value in temp_dis.items():
i_left = index.left
i_right = index.right
x0_list.append(i_left)
x1_list.append(i_right)
x_list.append((i_left + i_right)/2)
y_list.append(value)
pass
pre_data = {}
pre_data['title_str'] = '600004收益率分布'
pre_data['x'] = x_list
pre_data['x0'] = x0_list
pre_data['x1'] = x1_list
pre_data['y'] = y_list
temp_w = PyQtGraphWidget()
temp_w.show()
temp_w.set_data(pre_data)
sys.exit(app.exec_())
pass