Matplotlib的情节过于缓慢

dar*_*vba 1 python matplotlib

我正在尝试绘制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)

Imp*_*est 6

没有任何理由在matplotlib中有20000000点的线图.

让我们先考虑打印:matplotlib中的最大图形尺寸为50英寸.即使拥有3600 dpi的高科技绘图仪,也可以获得最大数量50*3600 = 180000点,这些点可以解析.

对于屏幕应用来说,它甚至更少:即使是高科技的4k屏幕也只有4000像素的有限分辨率.即使使用混叠效果,每个像素最多有~3个点仍然可以与人眼区分开来.结果:最多12000个点是有意义的.

因此,您要问的问题需要是:我如何将我的20000000数据点二次采样到仍然在纸张或屏幕上生成相同图像的一组点.

对此的解决方案很大程度上取决于数据的性质.如果它足够平滑,您可以只获取每个n列表条目.

sample = data[::n]
Run Code Online (Sandbox Code Playgroud)

如果存在需要解析的高频分量,则需要更复杂的技术,这又取决于数据的外观.

一种这样的技术可能是如何根据其密度对数组进行二次采样?(删除常用值,保留稀有值).