2017-06-15 94 views
0

我正在處理大約100,000條記錄的半大型數據集。當我用下面的代碼繪製一個df列作爲一行時,繪圖大約需要2秒。繪製大型數據集as kind = bar無效

with plt.style.context('ggplot'): 
    plt.figure(3,figsize=(16,12)) 
    plt.subplot(411) 
    df_pca_std['PC1_resid'].plot(title ="PC1 Residual", color='r') 

    #If I change the plot to a bar (no other change) 
    df_X_std['PC1_resid'].plot(**kind='bar'**, title ="PC1 Residual", color='r') 

花費112秒和渲染這樣的(錯雜x軸)的變化:

enter image description here

enter image description here

我已經抑制了軸,改變了風格,但既沒有幫助。任何人有想法如何更好地呈現和減少時間?正在繪製的數據正在檢查平均迴歸,並更好地顯示爲條形圖。

+3

這可能是因爲它試圖繪製* 100,000條*。這有點可笑... – Ajean

+0

100k記錄可笑嗎?不在我的行業。我可以在Excel中繪製100萬條。是的,Excel。爲什麼不在python中繪製一些工具呢? – tnf

+1

我很確定你在Excel中得到的是不是100萬條。讓我們來做一下數學運算:如果你的屏幕是每英寸72像素,並且你設計的每個水平像素只准確地繪製一個垂直條,那麼繪製100萬條這些條,你的繪圖最終會超過1000英尺長。 – Ajean

回答

0

不是視覺上最好的圖表,但至少它呈現。在14.2秒內繪製了210萬條。

import pygal              
bar_chart = pygal.Bar()            
bar_chart.add('PC1_residuals',df_X_std['PC1_resid'])       
bar_chart.render_to_file('bar_chart.svg') 
0

一個可能的解決方案:我實際上並不需要繪製酒吧,但可以使用速度非常快線圖和「fill_between」屬性從零色彩的情節線。效果類似於在一小部分時間內繪製所有小節。

使用DatetimeIndex的pydatetime方法將Date(df索引)轉換爲matplotlib可以使用的datetime.datetime的數組,然後更改圖。

plotDates = mpl.date2num(df.index.to_pydatetime()) 

plt.fill_between(plotDates,0,df_pca_std['PC1_resid'], alpha=0.5)