0

matplotlib で散布図のバッチを描画する必要があり、matplotlib の速度が遅いことがわかりました。関数のラインプロファイルを行ったところ、ホットスポットがfig, ax = plt.subplots(). 空白の図と軸を作成するのに 56.1% の時間がかかります!!

それをスピードアップする方法は?つまり、fig と ax を再利用して毎回作成しないようにするにはどうすればよいでしょうか。

ここにプロフィールレポートを添付してください(簡単にするために一部の行をカットしています)

Total time: 0.733771 s

Line #      Hits         Time  Per Hit   % Time  Line Contents
==============================================================
   517                                           @profile
   518                                           def df_scatter(df):
   519                                               ''' draw the scatter plot for Pandas dataframe 'df'
   533                                               '''                   
   536                                           
   537         1           75     75.0      0.0      biggest_area = 1000
   538         1          117    117.0      0.0      mycm =  matplotlib.cm.get_cmap('jet') # 'spectral'
   539                                           
   541         1           78     78.0      0.0      col_qty = len(df.columns)
   543                                           
   544         1         1859   1859.0      0.1      x = list(df.ix[:,0].values)
   545         1         1258   1258.0      0.0      y = list(df.ix[:,1].values)                                      
   551                                               
   552         1      1472345 1472345.0     56.1     fig, ax = plt.subplots()
   556                                               
   557         1         7007   7007.0      0.3      plt.subplots_adjust(left=0.07, right=0.92, bottom=0.1, top=0.95)
   558         1          179    179.0      0.0      x_margin, y_margin = (max(x)-min(x))/20, (max(y)-min(y))/20
   563                                           
   564         1           71     71.0      0.0      if col_qty > 2:
   565         1         1602   1602.0      0.1          r = list(df.ix[:,2].values)
   566         1          309    309.0      0.0          size_r = np.array(biggest_area)*r/max(r)
   585                                           
   586         1        34712  34712.0      1.3          sc = plt.scatter(x, y, marker='o', s=size_r, cmap=mycm, alpha=0.65)
   587                                           
   588                                                   # adding colorbar
   589         1       542417 542417.0     20.7          cbaxes = fig.add_axes([0.94, 0.25, 0.02, 0.70])
   590         1       165719 165719.0      6.3          cbar = plt.colorbar(sc, cax=cbaxes)
   591         1          122    122.0      0.0          cbar.solids.set_edgecolor('face')
   595                                           
   602         1         1061   1061.0      0.0          plt.figtext(0.94,0.10,"%0.1f"%(max(r)), fontproperties=TEXT_FONT_MEDIUM)
   639         1           66     66.0      0.0      return fig
4

1 に答える 1

-1

それを行う最良の方法は電話だと思います

fig = plt.figure() 
ax=fig.add_subplot(111) 

df_scatter の外側から。次に、引数として df_scatter に渡します。

df_scatter(df,fig,ax):

または単に df_scatter 内で実行します:

def df_scatter(df):
    fig = plt.gcf()
    ax = plt.gca()

fig と axis の作成が完了した後。

于 2013-07-04T13:55:03.583 に答える