我正在尝试绘制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()
Run Code Online (Sandbox Code Playgroud)
没有任何理由在matplotlib中有20000000点的线图.
让我们先考虑打印:matplotlib中的最大图形尺寸为50英寸.即使拥有3600 dpi的高科技绘图仪,也可以获得最大数量50*3600 = 180000点,这些点可以解析.
对于屏幕应用来说,它甚至更少:即使是高科技的4k屏幕也只有4000像素的有限分辨率.即使使用混叠效果,每个像素最多有~3个点仍然可以与人眼区分开来.结果:最多12000个点是有意义的.
因此,您要问的问题需要是:我如何将我的20000000数据点二次采样到仍然在纸张或屏幕上生成相同图像的一组点.
对此的解决方案很大程度上取决于数据的性质.如果它足够平滑,您可以只获取每个n列表条目.
sample = data[::n]
Run Code Online (Sandbox Code Playgroud)
如果存在需要解析的高频分量,则需要更复杂的技术,这又取决于数据的外观.
一种这样的技术可能是如何根据其密度对数组进行二次采样?(删除常用值,保留稀有值).
| 归档时间: |
|
| 查看次数: |
2103 次 |
| 最近记录: |