【发布时间】:2017-06-25 19:31:03
【问题描述】:
我正在尝试绘制 2000 万个数据点,但是使用 matplotlib 需要很长时间(超过一个小时),
我的代码中是否有什么东西让这个异常缓慢?
import csv
import matplotlib.pyplot as plt
import numpy as np
import Tkinter
from Tkinter import *
import tkSimpleDialog
from tkFileDialog import askopenfilename
plt.clf()
root = Tk()
root.withdraw()
listofparts = askopenfilename() # asks user to select file
root.destroy()
my_list1 = []
my_list2 = []
k = 0
csv_file = open(listofparts, 'rb')
for line in open(listofparts, 'rb'):
current_part1 = line.split(',')[0]
current_part2 = line.split(',')[1]
k = k + 1
if k >= 2: # skips the first line
my_list1.append(current_part1)
my_list2.append(current_part2)
csv_file.close()
plt.plot(my_list1 * 10, 'r')
plt.plot(my_list2 * 10, 'g')
plt.show()
plt.close()
【问题讨论】:
-
我已经删除了您与图书馆推荐相关的部分问题,因为这些问题在 Stack Overflow 上是题外话。
-
您是否对代码进行了概要分析以找到瓶颈。在我的 PC 上,绘制 100 万个随机数据需要几秒钟,而 200 万个或更多点会导致错误“在 draw_path:超出单元块限制”。另外,可以推荐 PyQtgraph 库。
-
谢谢。当我运行超过 100 万个数据点时,出现“溢出错误:分配了太多块”错误,但我通过添加 matplotlib.pyplot.rcParams['agg.path.chunksize'] = 20000 解决了这个问题。但是即使运行100,000 个数据点至少需要 20 分钟。我的笔记本只有 4GB 内存,问题会完全出在我的笔记本上吗?
-
代码不需要,我可能应该为 stackoverflow 取出 * 10。 Excel 每行有 100 万个单元格的限制,我在 excel 上创建了具有 100 万个数据点的 csv,但我想测试更多。它应该只重复图形线 10 次,它在尝试较小的数据集时有效。
标签: python matplotlib