第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

從文件中繪制數(shù)據(jù)會(huì)殺死 GUI

從文件中繪制數(shù)據(jù)會(huì)殺死 GUI

慕姐4208626 2023-06-27 14:12:00
我嘗試根據(jù)文件中的數(shù)據(jù)繪制圖表。比如一組數(shù)據(jù)有幾個(gè)圖表點(diǎn)是沒問題的,就畫出來了。然而,我要繪制的數(shù)據(jù)量在不斷增長(zhǎng),目前約為15000點(diǎn)。當(dāng)我嘗試加載和繪制它們時(shí),應(yīng)用程序界面崩潰。我的代碼如下。數(shù)據(jù)文件在這里:testdata.txt你能告訴我如何處理嗎?import sysfrom PyQt5.QtWidgets import QDialog, QApplication, QPushButton, QVBoxLayout?from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas?from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar?import matplotlib.pyplot as plt?class Window(QDialog):? ? def __init__(self):? ? ? ? super().__init__()? ? ? ? title = "Wykresy"? ? ? ? self.setWindowTitle(title)? ? ? ? # a figure instance to plot on?? ? ? ? self.figure = plt.figure()?? ?? ? ? ? # this is the Canvas Widget that??? ? ? ? # displays the 'figure'it takes the?? ? ? ? # 'figure' instance as a parameter to __init__?? ? ? ? self.canvas = FigureCanvas(self.figure)?? ?? ? ? ? # this is the Navigation widget?? ? ? ? # it takes the Canvas widget and a parent?? ? ? ? self.toolbar = NavigationToolbar(self.canvas, self)?? ?? ? ? ? # Just some button connected to 'plot' method?? ? ? ? self.button = QPushButton('Plot')?? ? ? ? ? ?? ? ? ? # adding action to the button?? ? ? ? self.button.clicked.connect(self.plot)?? ?? ? ? ? # creating a Vertical Box layout?? ? ? ? layout = QVBoxLayout()?? ? ? ? ? ?? ? ? ? # adding tool bar to the layout?? ? ? ? layout.addWidget(self.toolbar)?? ? ? ? ? ?? ? ? ? # adding canvas to the layout?? ? ? ? layout.addWidget(self.canvas)?? ? ? ? ? ?? ? ? ? # adding push button to the layout?? ? ? ? layout.addWidget(self.button)?? ? ? ? ? ?? ? ? ? # setting layout to the main window?? ? ? ? self.setLayout(layout)?? ? ? ? self.showMaximized()? ? ? ??? ? def plot(self):? ? ? ? with open('testdata.txt') as f:? ? ? ? ? ? lines = f.readlines()? ? ? ? ? ? x = [line.split('\t')[0] for line in lines]? ? ? ? ? ? y = [line.split('\t')[1] for line in lines]? ??? ? ? ? # clearing old figure?? ? ? ? self.figure.clear()?
查看完整描述

2 回答

?
有只小跳蛙

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊

主要瓶頸似乎是調(diào)用,它為這 15k 點(diǎn)中的每一個(gè)autofmt_xdate()點(diǎn)添加了一個(gè)日期標(biāo)簽。發(fā)生這種情況是因?yàn)槟?x 標(biāo)簽實(shí)際上不是日期;而是日期。就 pyplot 而言,它們只是任意字符串,因此它不知道要保留哪些以及要丟棄哪些。y 標(biāo)簽也發(fā)生了類似的情況。


將 x 解析為datetime對(duì)象,將 y 解析為floats:


from datetime import datetime


...

        x = [datetime.strptime(line.split('\t')[0], '%Y-%m-%d %H:%M:%S') for line in lines]

        y = [float(line.split('\t')[1]) for line in lines]

現(xiàn)在,我在 x 軸上每小時(shí)獲得一次刻度,在 y 軸上每 2.5 度獲得一次刻度。渲染幾乎是瞬時(shí)的。


在嘗試?yán)L制數(shù)據(jù)之前,您還應(yīng)該考慮對(duì)數(shù)據(jù)進(jìn)行下采樣。無論如何,15000 點(diǎn)遠(yuǎn)遠(yuǎn)超出了典型計(jì)算機(jī)屏幕的水平分辨率。


查看完整回答
反對(duì) 回復(fù) 2023-06-27
?
慕哥9229398

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以使用pandas讀取文件,這可能比循環(huán)內(nèi)容更快。


(...)

def plot(self):

? ? df = pd.read_csv('testdata.txt', sep='\t', header=None, parse_dates=[0])

? ? (...)

? ? # plot data

? ? ax.plot(df[0], df[1], c='r', label='temperature')


查看完整回答
反對(duì) 回復(fù) 2023-06-27
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)