# -*- coding: utf-8 -*-
'''
TODO:LQD
'''
import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FC
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QVBoxLayout, QWidget
import traceback
data="""YSBS20255b-2009-1 0.155 0.1536 0.162725172
YSBS20255b-2009-2 0.43 0.4327 0.458406131
YSBS20255b-2009-3 0.67 0.6538 0.692641388
YSBS20255b-2009-5 0.0028 0.0027 0.002860403
YSBS20255b-2009-6 0.142 0.1394 0.147681568
YSBS20255b-2009-7 0.664 0.6183 0.65503238
GSB03-2453-2008-2 0.256 0.2409 0.255211548
GSB03-2453-2008-4 0.085 0.0849 0.089943796
YSBS11279-2000 0.803 0.7395 0.783432711
9902-GBW(E)010137 1.21 1.1099 1.175837682
Q235-YSBS11173a-2007 0.188 0.1942 0.205737164
16MnV5-YSBC35201-97-211 0.171 0.1646 0.174378667
Q345b-YSBS11264a-2011 0.158 0.1593 0.168763801
YSBS11078d-2012 0.0018 0.0016 0.001695054
BS1020 0.21 0.2138 0.226501573
GCr15-YSBS11273b-2007 0.999 0.962 1.01915114"""
data=data.split("\n")
for i in range(len(data)):
data[i]=data[i].split(" ")
data[i] = list(filter(lambda x: x!="", data[i]))
std=[]
measure=[]
yfited=[]
for i in range(len(data)):
std.append(float(data[i][1]))
measure.append(float(data[i][2]))
yfited.append(float(data[i][3]))
colors = [50 for one in std]
print(measure,std,yfited)
selected=[]
class QtDraw(QMainWindow):
flag_btn_start = True
def __init__(self):
super().__init__()
self.init_ui()
self.slot_btn_start()
def init_ui(self):
self.resize(800, 600)
self.setWindowTitle('PyQt5 Draw')
# TODO:这里是结合的关键
self.fig = plt.Figure()
self.canvas = FC(self.fig)
self.btn_start = QPushButton(self)
self.btn_start.setText('draw')
self.btn_start.clicked.connect(self.slot_btn_start)
widget = QWidget()
layout = QVBoxLayout()
layout.addWidget(self.canvas)
layout.addWidget(self.btn_start)
widget.setLayout(layout)
self.setCentralWidget(widget)
self.fig.canvas.mpl_connect('pick_event', self.onpick)
def onpick(self,event):
global selected,colors
thisline = event.artist
print(dir(thisline),thisline)
# xdata = thisline.get_xdata()
# ydata = thisline.get_ydata()
ind = event.ind
print(ind)
colors[ind[0]]=80
# print(dir(thisline),thisline)
# points = tuple(zip(xdata[ind], ydata[ind]))
# thisline.set_alpha(0.5)
# for point in points:
# if point in selected:
# pass
# else:
# selected.append(point)
# print(selected)
# self.fig.canvas.draw()
self.slot_btn_start()
def slot_btn_start(self):
try:
ax = self.fig.add_subplot(111)
ax.cla() # TODO:删除原图,让画布上只有新的一次的图
# ax.plot(measure,std,"o")
ax.scatter(measure, std,c=colors, cmap='viridis',picker=5)
ax.plot(measure,yfited)
# cbbar=ax.scatter(x,y,'-o')
# self.fig.colorbar(cbbar)
self.canvas.draw() # TODO:这里开始绘制
except Exception as e:
traceback.print_exc()
print(e)
def ui_main():
app = QApplication(sys.argv)
w = QtDraw()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
ui_main()