可以加快此 pgfplots 图的编译时间吗?

可以加快此 pgfplots 图的编译时间吗?

我已经经历过这个问题正确选择表中坐标值和元值的分配可以大大提高编译速度pgfplotslua backend所以我只想问一下,是否有人看到可以加快速度的东西,主要是在颜色图转换中?

对于此代码的编译,lua backend根据日志,也被禁用,并显示消息:Package pgfplots info on input line 97: Using 'lua backend=false' for axis: x coord trafo unsupported.。可以通过更改代码或颜色条轴转换的代码来避免这种情况吗point meta,例如通过使用一些 lua 代码?

我的主要问题是编译时间(即使我将图像外部化)。对于分辨率不令人满意的输入数据文件(.txt 文件大约有 300 kB),编译时间略长于 3 分钟。采样率加倍后,输入文件的大小大约是原来的四倍,编译时间增加了十六倍,即将近 1 小时。(4²=16,这与手册中pgfplots对大型数据集二次复杂度的陈述一致)这种复杂性来自哪里?仅仅是数据量,还是将输入文件分成几个文件会更好?

仅坐标变换代码:

 \pgfplotsset{
  symlog colormap trafo/.code={
    \pgfkeysalso{%
      y coord trafo/.code={%
        \pgfmathparse{##1>#1 ? 1+3*ln(##1<#1?1: (##1/#1))/ln(10*sqrt(10)) : (##1<-#1 ? -1-3*ln(##1>-#1?1: (-##1/#1))/ln(10*sqrt(10))      : ##1/#1)}
      },
      y coord inv trafo/.code={%
        \pgfmathparse{##1>1 ? exp((##1-1)/3*ln(10*sqrt(10)))*#1 : (##1<-1 ? -exp((-##1-1)/3*ln(10*sqrt(10)))*#1  : ##1*#1)}
      },
    }%
  },
  symlog colormap/.code n args={3}{
    \pgfkeysalso{
      colorbar style={
        symlog colormap trafo={#1},
        point meta min={#2},
        point meta max={#3},
      },
      point meta={z>#1 ? 1+3*ln(z<#1?1: (z/#1))/ln(10*sqrt(10)) : (z<-#1 ? -1-3*ln(z>-#1?1: (-z/#1))/ln(10*sqrt(10)) : z/#1)},
    }%
  },
}

完整示例

\documentclass{article}
\usepackage{xfrac}

\def\infile{infile.txt}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}

\pgfplotsset{
  symlog colormap trafo/.code={
    \pgfkeysalso{%
      y coord trafo/.code={%
        \pgfmathparse{##1>#1 ? 1+3*ln(##1<#1?1: (##1/#1))/ln(10*sqrt(10)) : (##1<-#1 ? -1-3*ln(##1>-#1?1: (-##1/#1))/ln(10*sqrt(10))      : ##1/#1)}
      },
      y coord inv trafo/.code={%
        \pgfmathparse{##1>1 ? exp((##1-1)/3*ln(10*sqrt(10)))*#1 : (##1<-1 ? -exp((-##1-1)/3*ln(10*sqrt(10)))*#1  : ##1*#1)}
      },
    }%
  },
  symlog colormap/.code n args={3}{
    \pgfkeysalso{
      colorbar style={
        symlog colormap trafo={#1},
        point meta min={#2},
        point meta max={#3},
      },
      point meta={z>#1 ? 1+3*ln(z<#1?1: (z/#1))/ln(10*sqrt(10)) : (z<-#1 ? -1-3*ln(z>-#1?1: (-z/#1))/ln(10*sqrt(10)) : z/#1)},
    }%
  },
}


\begin{document}
\thispagestyle{empty} 

\begin{tikzpicture}
\begin{axis}[axis equal image,
             xmin=-8,
             z buffer = sort,
             xmax=8,
             ymin=0,
             ymax=10,
             grid=major, 
             axis on top,
             colorbar,
             symlog colormap={142.3}{-4500}{4500},
             colormap/viridis, 
             mesh/ordering=y varies,
             view={0}{90},
             colorbar style={
                             scaled ticks=false,
                             ytick={-4501,-1423,-450,-142.3,0,142.3,450,1423,4501},
                             yticklabel={
                                 \pgfmathparse{\tick/100}\pgfmathprintnumber[fixed relative, precision=2]{\pgfmathresult}
                                        },
                             yticklabel style={
                                               align=right,
                                               text width = 1.875em,
                                               },       
                             xlabel = {$E_z \textrm{ in kV/m}$},   
                             xlabel style = {xshift = 0.35cm, yshift = -0.4625 cm},    
                             },
             tick label style={/pgf/number format/fixed},
             enlargelimits=false,
             xlabel={$x \textrm{ in mm}$}, 
             ylabel={$y \textrm{ in mm}$}, 
             ]

      \pgfplotstableset{skip first n=2}
      \pgfplotstableread{\infile}\datatable
            \addplot3[
                     mesh/rows=65, 
                     surf,  
                     shader = interp,          
                    ] table [
                             x index = 0,
                             y  index= 1,
                             z index = 2;
                            ]   from \datatable {};
\end{axis}
\end{tikzpicture}
\end{document}

示例文件(截断)

x [mm] 0
-----------------------------------------------------------------------------------------------------------------------------------------  
-8 0 51.0614
-7.75 0 82.8847
-7.5 0 63.4588
-7.25 0 53.413
-7 0 45.8015
-6.75 0 38.6945
-6.5 0 31.5657
-6.25 0 24.3476
-6 0 17.1636
-5.75 0 10.2049
-5.5 0 3.6868
-5.25 0 -2.17792
-5 0 -7.18864
-4.75 0 -11.1697
-4.5 0 -13.9803
-4.25 0 -15.5134
-4 0 -15.7146
-3.75 0 -14.5676
-3.5 0 -12.1229
-3.25 0 -8.48218
-3 0 -3.81099
-2.75 0 1.55382
-2.5 0 7.13892
-2.25 0 12.0255
-2 0 14.4733
-1.75 0 10.3511
-1.5 0 -56.9732
-1.25 0 -57.9164
-1 0 -21.3907
-0.75 0 93.6603
-0.5 0 512.283
-0.25 0 1778.09
0 0 1881.37
0.25 0 1778.09
0.5 0 512.281
0.75 0 93.658
1 0 -21.3938
1.25 0 -57.92
1.5 0 -56.9765
1.75 0 10.3483
2 0 14.4687
2.25 0 12.0195
2.5 0 7.13207
2.75 0 1.54623
3 0 -3.81901
3.25 0 -8.49036
3.5 0 -12.131
3.75 0 -14.5755
4 0 -15.7219
4.25 0 -15.5201
4.5 0 -13.9861
4.75 0 -11.1745
5 0 -7.19197
5.25 0 -2.17986
5.5 0 3.68637
5.75 0 10.2064
6 0 17.1669
6.25 0 24.3528
6.5 0 31.5727
6.75 0 38.7035
7 0 45.8125
7.25 0 53.4264
7.5 0 63.4758
7.75 0 82.9077
8 0 51.0745
-8 0.25 48.8507
-7.75 0.25 71.4631
-7.5 0.25 51.8272
-7.25 0.25 42.4871
-7 0.25 36.1465
-6.75 0.25 30.5903
-6.5 0.25 25.1597
-6.25 0.25 19.6837
-6 0.25 14.2034
-5.75 0.25 8.83354
-5.5 0.25 3.71559
-5.25 0.25 -1.00413
-5 0.25 -5.18482
-4.75 0.25 -8.69938
-4.5 0.25 -11.4425
-4.25 0.25 -13.3293
-4 0.25 -14.3084
-3.75 0.25 -14.3513
-3.5 0.25 -13.4718
-3.25 0.25 -11.714
-3 0.25 -9.15892
-2.75 0.25 -6.01235
-2.5 0.25 -2.57951
-2.25 0.25 0.450236
-2 0.25 1.43912
-1.75 0.25 -4.83268
-1.5 0.25 -42.3624
-1.25 0.25 -38.0751
-1 0.25 16.1594
-0.75 0.25 178.537
-0.5 0.25 748.531
-0.25 0.25 2461.65
0 0.25 2601.04
0.25 0.25 2461.65
0.5 0.25 748.53
0.75 0.25 178.535
1 0.25 16.1563
1.25 0.25 -38.0789
1.5 0.25 -42.366
1.75 0.25 -4.83578
2 0.25 1.43538
2.25 0.25 0.445735
2.5 0.25 -2.58454
2.75 0.25 -6.01804
3 0.25 -9.16484
3.25 0.25 -11.7201
3.5 0.25 -13.478
3.75 0.25 -14.3574
4 0.25 -14.314
4.25 0.25 -13.3345
4.5 0.25 -11.4472
4.75 0.25 -8.70337
5 0.25 -5.1878
5.25 0.25 -1.0061
5.5 0.25 3.71481
5.75 0.25 8.83392
6 0.25 14.2051
6.25 0.25 19.6867
6.5 0.25 25.1642
6.75 0.25 30.5962
7 0.25 36.154
7.25 0.25 42.4966
7.5 0.25 51.8396
7.75 0.25 71.4815
8 0.25 48.8619
-8 0.5 48.7844
-7.75 0.5 67.6708
-7.5 0.5 47.0852
-7.25 0.5 37.682
-7 0.5 31.6811
-6.75 0.5 26.659
-6.5 0.5 21.8645
-6.25 0.5 17.0579
-6 0.5 12.2321
-5.75 0.5 7.45987
-5.5 0.5 2.84438
-5.25 0.5 -1.50177
-5 0.5 -5.46699
-4.75 0.5 -8.94756
-4.5 0.5 -11.8542
-4.25 0.5 -14.1114
-4 0.5 -15.6659
-3.75 0.5 -16.4791
-3.5 0.5 -16.5394
-3.25 0.5 -15.8496
-3 0.5 -14.4255
-2.75 0.5 -12.3673
-2.5 0.5 -9.79737
-2.25 0.5 -6.98801
-2 0.5 -4.6393
-1.75 0.5 -4.80819
-1.5 0.5 -11.6809
-1.25 0.5 8.14997
-1 0.5 78.3415
-0.75 0.5 274.749
-0.5 0.5 943.2
-0.25 0.5 2944.76
0 0.5 3107.5
0.25 0.5 2944.76
0.5 0.5 943.199
0.75 0.5 274.747
1 0.5 78.3391
1.25 0.5 8.14696
1.5 0.5 -11.6839
1.75 0.5 -4.8112
2 0.5 -4.64255
2.25 0.5 -6.99184
2.5 0.5 -9.80156
2.75 0.5 -12.3719
3 0.5 -14.4304
3.25 0.5 -15.8547
3.5 0.5 -16.5445
3.75 0.5 -16.4843
4 0.5 -15.671
4.25 0.5 -14.1161
4.5 0.5 -11.8587
4.75 0.5 -8.95129
5 0.5 -5.47007
5.25 0.5 -1.50406
5.5 0.5 2.84302
5.75 0.5 7.45941
6 0.5 12.2327
6.25 0.5 17.0596
6.5 0.5 21.8673
6.75 0.5 26.6631
7 0.5 31.6865
7.25 0.5 37.6891
7.5 0.5 47.095
7.75 0.5 67.6869
8 0.5 48.7944
-8 0.75 49.6667
-7.75 0.75 67.5706
-7.5 0.75 45.782
-7.25 0.75 35.9227
-7 0.75 29.7622
-6.75 0.75 24.7203
-6.5 0.75 19.9793
-6.25 0.75 15.2548
-6 0.75 10.5115
-5.75 0.75 5.80032
-5.5 0.75 1.2061
-5.25 0.75 -3.17377
-5 0.75 -7.24051
-4.75 0.75 -10.9001
-4.5 0.75 -14.0696
-4.25 0.75 -16.6759
-4 0.75 -18.6636
-3.75 0.75 -19.9861
-3.5 0.75 -20.6155
-3.25 0.75 -20.5269
-3 0.75 -19.6867
-2.75 0.75 -18.1148
-2.5 0.75 -15.773
-2.25 0.75 -12.5353
-2 0.75 -8.19302
-1.75 0.75 -1.85639
-1.5 0.75 10.4672
-1.25 0.75 42.7128
-1 0.75 122.477
-0.75 0.75 336.302
-0.5 0.75 1052.96
-0.25 0.75 3198.01
0 0.75 3372.36
0.25 0.75 3198.01
0.5 0.75 1052.96
0.75 0.75 336.301
1 0.75 122.475
1.25 0.75 42.7104
1.5 0.75 10.4648
1.75 0.75 -1.85915
2 0.75 -8.19592
2.25 0.75 -12.5388
2.5 0.75 -15.7768
2.75 0.75 -18.1191
3 0.75 -19.6913
3.25 0.75 -20.5316
3.5 0.75 -20.6203
3.75 0.75 -19.991
4 0.75 -18.6684
4.25 0.75 -16.6806
4.5 0.75 -14.0739
4.75 0.75 -10.904
5 0.75 -7.24377
5.25 0.75 -3.17647
5.5 0.75 1.20418
5.75 0.75 5.79908
6 0.75 10.5113
6.25 0.75 15.2555
6.5 0.75 19.9811
6.75 0.75 24.7232
7 0.75 29.7664
7.25 0.75 35.9284
7.5 0.75 45.7904
7.75 0.75 67.5843
8 0.75 49.6757
-8 1 50.6639
-7.75 1 68.5314
-7.5 1 45.5971
-7.25 1 35.1523
-7 1 28.632
-6.75 1 23.3348
-6.5 1 18.395
-6.25 1 13.498
-6 1 8.59186
-5.75 1 3.71581
-5.5 1 -1.05397
-5.25 1 -5.6273
-5 1 -9.91064
-4.75 1 -13.8143
-4.5 1 -17.2579
-4.25 1 -20.1693
-4 1 -22.492
-3.75 1 -24.1753
-3.5 1 -25.1828
-3.25 1 -25.4734
-3 1 -24.9818
-2.75 1 -23.6741
-2.5 1 -21.4015
-2.25 1 -17.7821
-2 1 -12.1512
-1.75 1 -2.75656
-1.5 1 14.6518
-1.25 1 50.5191
-1 1 131.565
-0.75 1 345.117
-0.5 1 1059.9
-0.25 1 3203.64
0 1 3377.83
0.25 1 3203.65
0.5 1 1059.9
0.75 1 345.115
1 1 131.564
1.25 1 50.5172
1.5 1 14.6496
1.75 1 -2.75902
2 1 -12.1539
2.25 1 -17.7854
2.5 1 -21.405
2.75 1 -23.6781
3 1 -24.9861
3.25 1 -25.478
3.5 1 -25.1876
3.75 1 -24.1801
4 1 -22.4967
4.25 1 -20.174
4.5 1 -17.2624
4.75 1 -13.8185
5 1 -9.91432
5.25 1 -5.63034
5.5 1 -1.05653
5.75 1 3.71403
6 1 8.59102
6.25 1 13.4979
6.5 1 18.3959
6.75 1 23.3367
7 1 28.6351
7.25 1 35.1571
7.5 1 45.6044
7.75 1 68.5438
8 1 50.6719
-8 1.25 51.3174
-7.75 1.25 69.3629
-7.5 1.25 45.4568
-7.25 1.25 34.4408
-7 1.25 27.512
-6.75 1.25 21.8823
-6.5 1.25 16.6537
-6.25 1.25 11.4921
-6 1.25 6.33623
-5.75 1.25 1.21921
-5.5 1.25 -3.78699
-5.25 1.25 -8.59521
-5 1.25 -13.1147
-4.75 1.25 -17.2581
-4.5 1.25 -20.9464
-4.25 1.25 -24.1099
-4 1.25 -26.6934
-3.75 1.25 -28.6475
-3.5 1.25 -29.9355
-3.25 1.25 -30.5137
-3 1.25 -30.3075
-2.75 1.25 -29.2648
-2.5 1.25 -27.1978
-2.25 1.25 -23.647
-2 1.25 -17.8619
-1.75 1.25 -8.08802
-1.5 1.25 9.40737
-1.25 1.25 43.5587
-1 1.25 118.623
-0.75 1.25 315.05
-0.5 1.25 972.254
-0.25 1.25 2944.29
0 1.25 3104.61
0.25 1.25 2944.29
0.5 1.25 972.252
0.75 1.25 315.049
1 1.25 118.622
1.25 1.25 43.5572
1.5 1.25 9.4056
1.75 1.25 -8.09007
2 1.25 -17.8643
2.25 1.25 -23.6499
2.5 1.25 -27.2009
2.75 1.25 -29.2685
3 1.25 -30.3117
3.25 1.25 -30.518
3.5 1.25 -29.9403
3.75 1.25 -28.6524
4 1.25 -26.6983
4.25 1.25 -24.1148
4.5 1.25 -20.9512
4.75 1.25 -17.2625
5 1.25 -13.1189
5.25 1.25 -8.59896
5.5 1.25 -3.79004
5.75 1.25 1.21679
6 1.25 6.33456
6.25 1.25 11.4913
6.5 1.25 16.6538
6.75 1.25 21.8834
7 1.25 27.5144
7.25 1.25 34.4446
7.5 1.25 45.463
7.75 1.25 69.3739
8 1.25 51.3245
-8 1.5 51.2722
-7.75 1.5 69.3806
-7.5 1.5 44.8177
-7.25 1.5 33.3384
-7 1.5 26.0324
-6.75 1.5 20.0701
-6.5 1.5 14.5394
-6.25 1.5 9.0976
-6 1.5 3.68028
-5.75 1.5 -1.68137
-5.5 1.5 -6.91641
-5.25 1.5 -11.9388
-5 1.5 -16.6587
-4.75 1.5 -20.9906
-4.5 1.5 -24.8586
-4.25 1.5 -28.1963
-4 1.5 -30.9547
-3.75 1.5 -33.0928
-3.5 1.5 -34.5847
-3.25 1.5 -35.4024
-3 1.5 -35.4942
-2.75 1.5 -34.8323
-2.5 1.5 -33.2706
-2.25 1.5 -30.4296
-2 1.5 -25.6859
-1.75 1.5 -17.5932
-1.5 1.5 -3.12652
-1.25 1.5 24.96
-1 1.5 86.4887
-0.75 1.5 247.128
-0.5 1.5 783.513
-0.25 1.5 2391.2
0 1.5 2522.36
0.25 1.5 2391.21
0.5 1.5 783.511
0.75 1.5 247.128
1 1.5 86.4884
1.25 1.5 24.959
1.5 1.5 -3.12774
1.75 1.5 -17.5947
2 1.5 -25.6879
2.25 1.5 -30.4323
2.5 1.5 -33.2736
2.75 1.5 -34.8358
3 1.5 -35.4981
3.25 1.5 -35.4066
3.5 1.5 -34.5893
3.75 1.5 -33.0976
4 1.5 -30.9597
4.25 1.5 -28.2014
4.5 1.5 -24.8636
4.75 1.5 -20.9955
5 1.5 -16.6633
5.25 1.5 -11.943
5.5 1.5 -6.92009
5.75 1.5 -1.6845
6 1.5 3.67791
6.25 1.5 9.09602
6.5 1.5 14.5387
6.75 1.5 20.0704
7 1.5 26.0338
7.25 1.5 33.3413
7.5 1.5 44.8228
7.75 1.5 69.39
8 1.5 51.2781

答案1

如果您不必每次都编译这部分,您可以创建一个 pdf 文件并通过 includegraphics 包含它....只是一个想法......

答案2

我找到了一种可以大大减少时间的方法。正如 pfgplots 手册中提到的那样,如何加载数据非常重要。使用文件名加载表格

\addplot3[
          mesh/rows=65, 
          surf,  
          shader = interp,          
         ] table [
                  x index = 0,
                  y  index= 1,
                  z index = 2;
                 ]   {\infile}; % \infile just contains the filename, not a table

而不是基于宏的预加载表

\pgfplotstableread{\infile}\datatable
\addplot3[
          mesh/rows=65, 
          surf,  
          shader = interp,          
         ] table [
                  x index = 0,
                  y  index= 1,
                  z index = 2;
                 ]   from \datatable {};

将 500kB 输入文件(约 26k 行)的编译时间从 363 秒(6 分钟)显著缩短至 42 秒。当然,由于文件大小的原因,最好在之后将生成的 pdf 转换为 png。

相关内容