sách gpt4 ai đã đi

matplotlib show() không hoạt động hai lần

In lại Tác giả: IT Lao Gao Thời gian cập nhật: 2023-10-28 21:13:13 26 4
mua khóa gpt4 Nike

Tôi gặp một vấn đề kỳ lạ với matplotlib. Nếu tôi chạy chương trình này, tôi có thể mở và đóng cùng một biểu đồ nhiều lần.

nhập numpy
từ pylab nhập hình, hiển thị


X = numpy.random.rand(100, 1000)
xs = numpy.mean(X, trục=1)
ys = numpy.std(X, trục=1)

hình = hình()
ax = fig.add_subplot(111)
ax.set_title('nhấp vào điểm để vẽ chuỗi thời gian')
dòng, = ax.plot(xs, ys, 'o', picker=5) # 5 điểm dung sai


def onpick(sự kiện):

figi = hình()
ax = figi.add_subplot(111)
ax.plot([1,2,3,4])
figi.hiển thị()

fig.canvas.mpl_connect('pick_event', onpick)

trình diễn()

Nếu thay vào đó tôi sử dụng cùng mã hàm onpick trong tiện ích tùy chỉnh của mình thì nó chỉ mở biểu đồ lần đầu tiên, trong các trường hợp khác, nó sẽ nhập hàm nhưng không hiển thị biểu đồ:

từ PyQt4 nhập QtGui, QtCore
từ matplotlib.backends.backend_qt4agg nhập FigureCanvasQTAgg dưới dạng FigureCanvas
từ matplotlib.figure nhập Hình
nhập numpy dưới dạng np
nhập matplotlib.pyplot dưới dạng plt
từ matplotlib.backends.backend_qt4 nhập NavigationToolbar2QT làm NavigationToolbar
thời gian nhập khẩu

BƯỚC = 0,000152

lớp MplCanvas(FigureCanvas):

định nghĩa __init__(bản thân):

# khởi tạo canvas
FigureCanvas.__init__(bản thân, Figure())

tự.queue = []
self.I_data = np.array([])
self.T_data = np.array([])

self.LvsT = self.figure.add_subplot(111)
self.LvsT.set_xlabel('Thời gian, s')
self.LvsT.set_ylabel('Điện áp PMT, V')
self.LvsT.set_title("Ánh sáng so với Thời gian")
self.LvsT.grid(Đúng)

self.old_size = self.LvsT.bbox.width, self.LvsT.bbox.height
self.LvsT_background = self.copy_from_bbox(self.LvsT.bbox)

self.LvsT_plot, = self.LvsT.plot(self.T_data,self.I_data)
#self.LvsT_plot2, = self.LvsT.plot(self.T_data2,self.I_data2)

self.mpl_connect('axes_enter_event', self.enter_axes)
self.mpl_connect('button_press_event', self.onpick)
tự đếm = 0
tự vẽ()

def enter_axes(bản thân, sự kiện):

in "dentro"

def onpick(self,event):
in "nhấp chuột"
in 'bạn đã nhấn', event.canvas

a = np.arange(10)
in một
in tự đếm

fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(a)
hình.hiển thị()



def Start_Plot(self,q,Vmin,Vmax,ScanRate,Cycles):
tự.queue = q

tự.LvsT.clear()
self.LvsT.set_xlim(0,abs(Vmin-Vmax)/Tốc độ quét*Chu kỳ)
tự.LvsT.set_ylim(-3, 3)
self.LvsT.set_autoscale_on(Sai)
tự.LvsT.clear()
tự vẽ()

self.T_data = np.array([])
self.I_data = np.array([])

# gọi phương thức cập nhật (để tăng tốc độ trực quan hóa)
self.timerEvent(Không có)
# bắt đầu bộ đếm thời gian, kích hoạt sự kiện sau mỗi 1000 mili giây (=1 giây)
self.timerLvsT = self.startTimer(3)

def timerEvent(self, evt):

current_size = self.LvsT.bbox.width, self.LvsT.bbox.height
nếu self.old_size không bằng current_size:
self.old_size = kích thước hiện tại
tự.LvsT.clear()
tự.LvsT.grid()
tự vẽ()
self.LvsT_background = self.copy_from_bbox(self.LvsT.bbox)

self.restore_region(self.LvsT_background, bbox=self.LvsT.bbox)

kết quả = self.queue.get()

nếu kết quả == 'DỪNG':
self.LvsT.draw_artist(self.LvsT_plot)
tự.killTimer(self.timerLvsT)
in "Cốt truyện kết thúc LvsT"

khác:
# thêm dữ liệu mới vào tập dữ liệu
self.T_data = np.append(self.T_data,result[0:len(result)/2])
self.I_data = np.append(self.I_data,result[len(kết quả)/2:len(kết quả)])

self.LvsT_plot.set_data(self.T_data,self.I_data)#L_data
#self.LvsT_plot2.set_data(self.T_data2,self.I_data2)#L_data

self.LvsT.draw_artist(self.LvsT_plot)

self.blit(self.LvsT.bbox)


lớp LvsT_MplWidget(QtGui.QWidget):
def __init__(self, parent = Không có):
QtGui.QWidget.__init__(bản thân, cha mẹ)
self.canvas = MplCanvas()
self.vbl = QtGui.QVBoxLayout()
self.vbl.addWidget(self.canvas)
self.setLayout(self.vbl)

Tiện ích này cần thiết cho biểu đồ động, khi thí nghiệm kết thúc, nếu tôi nhấp vào biểu đồ, nó sẽ xuất hiện với một biểu đồ chỉ xuất hiện lần đầu tiên.

Bạn có biết gì không?

Cảm ơn bạn rất nhiều.

1 Câu trả lời

Khi bắt đầu mã của bạn, hãy bật chế độ tương tác thông qua plt.ion()

Liên quan đến python - matplotlib show() không hoạt động hai lần, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/5524858/

26 4 0
Bài viết được đề xuất: Mẹo kiểm tra Django
Bài viết được đề xuất: Các tệp lớp JDK 7 tương thích ngược với JDK 6
Bài viết được đề xuất: Tìm từ dài nhất cho một tập hợp nhất định - Stack Overflow
Bài viết được đề xuất: Gọi các hàm Cython từ C++
CNTT Lao Gao
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com