用熊猫绘制大型数据集

时间:2018-07-05 17:39:45

标签: python pandas matplotlib

我将具有数百万个值的示波器数据集转换为pandas DataFrame。下一步是绘制它。但是Matplotlib需要在我相当强大的机器上〜50秒才能绘制DataFrame。

import pandas as pd
import matplotlib.pyplot as plt
import readTrc    

datX, datY, m = readTrc.readTrc('C220180104_ch2_UHF00000.trc')

srx, sry = pd.Series(datX), pd.Series(datY)
df = pd.concat([srx, sry], axis = 1)
df.set_index(0, inplace = True)

df.plot(grid = 1)
plt.show()

现在,我发现有一种方法可以通过使用'Agg'来使大型数据集的matplotlib更快。

import matplotlib
matplotlib.use('Agg')
import pandas as pd
import matplotlib.pyplot as plt
import readTrc

datX, datY, m = readTrc.readTrc('C220180104_ch2_UHF00000.trc')

srx, sry = pd.Series(datX), pd.Series(datY)
df = pd.concat([srx, sry], axis = 1)
df.set_index(0, inplace = True)

df.plot(grid = 1)
plt.show()

不幸的是,没有显示情节。处理地块的过程大约需要5秒钟(很大的改进),但未显示任何地块。这种方法与大熊猫不兼容吗?

1 个答案:

答案 0 :(得分:0)

您可以使用PlotyLenspy(旨在解决此确切问题)。这是一个如何在散点图上绘制10m点的示例。该绘图在我的2016 MacBook上运行速度非常快。

import numpy as np
import plotly.graph_objects as go
from lenspy import DynamicPlot

# First, let's create a very large figure
x = np.arange(1, 11, 1e-6)
y = 1e-2*np.sin(1e3*x) + np.sin(x) + 1e-3*np.sin(1e10*x)
fig = go.Figure(data=[go.Scattergl(x=x, y=y)])
fig.update_layout(title=f"{len(x):,} Data Points.")

# Use DynamicPlot.show to view the plot
plot = DynamicPlot(fig)
plot.show()

# Plot will be available in the browser at http://127.0.0.1:8050/

对于您的用例(同样,由于我无权访问您的数据集,因此我无法对其进行测试):

import pandas as pd
import matplotlib.pyplot as plt
import readTrc   
from lenspy import DynamicPlot
import plotly.graph_objects as go

datX, datY, m = readTrc.readTrc('C220180104_ch2_UHF00000.trc')

srx, sry = pd.Series(datX), pd.Series(datY)

fig = go.Figure(data=[go.Scattergl(x=srx, y=sry)])
fig.update_layout(title=f"{len(x):,} Data Points.")

# Use DynamicPlot.show to view the plot
plot = DynamicPlot(fig)
plot.show()

免责声明:我是Lenspy的创建者