29

While examining How can I monitor the progress of a Plot? I was surprised to discover that in some cases ListPlot in version 10.0 and 10.1 is orders of magnitude slower than it is in version 7. This is not rendering time but generation of the Graphics itself. Here is an example.

dat = Table[{x, y}, {x, 200}, {y, RandomReal[9, 500]}];

lp = ListPlot[dat, ImageSize -> 600]

enter image description here

Rendering this plot takes only ~0.08 second according to EvaluationCompletionAction -> "ShowTiming" as seen by evaluating lp separately. However generating lp (in 10.1) is quite slow:

ListPlot[dat] // RepeatedTiming // First
2.02

This takes only 0.018 second in version 7. Why is 10.1 two orders of magnitude slower?


David Skulsky reports these AbsoluteTiming results:

MacBook Air: v8 2.1 sec, v9 0.43 sec, v10 3.6 sec.

Apparently the problem is not limited to v10 though it is most severe there. Should this not be a simple operation and much faster than this as indeed it was in version 7?


First attempt at analysis

Since no useful explanation had yet been provided I thought I would see if I could learn anything with a Trace. What I learned is that the sheer size of Trace is comically, exasperatingly large:

bigTrace = Trace[ListPlot[dat]];

ByteCount[bigTrace]
5728324392

A five and a half gigabyte trace? Really? I'll keep trying to learn more but that's just depressing. Can this be considered a bug? Someone please tell me this has been fixed after version 10.1.

Mr.Wizard
  • 271,378
  • 34
  • 587
  • 1,371
  • 1
    Has anyone looked more broadly at plotting speeds? Apparently StreamPlot is slower too: http://mathematica.stackexchange.com/questions/78938/streamplot-slow-in-version-10?rq=1 – Cassini May 29 '15 at 16:32
  • @David I have not but I hope that someone does; it would be interesting. Unlike the case of StreamPlot there should be no addaptive sampling in ListPlot; it should be a rather direct conversion to Point expressions with styling added. It should not be this slow. – Mr.Wizard May 29 '15 at 16:40
  • @David Did you confirm that v9 is not affected by this? I did not add a version tag because I do not have access to v8 and v9 to check. – Mr.Wizard May 29 '15 at 16:44
  • 1
    I get ~0.5 seconds with v9/windows and ~6 seconds 10.1/linux – george2079 May 29 '15 at 16:55
  • 4
    Intel is partnering with WR – Dr. belisarius May 29 '15 at 17:03
  • 2
    @belisarius I fear I am missing out on your clever humor; is Intel also getting slower? (Sorry to have to ask for an explanation and spoil the joke.) – Mr.Wizard May 29 '15 at 17:04
  • @Mr.Wizard Nope. Intel machines are going faster. That's why you want to buy them their new processor to be able to run your old code – Dr. belisarius May 29 '15 at 17:06
  • 1
    @belisarius Oh, that. :-D – Mr.Wizard May 29 '15 at 17:09
  • 3
    @Mr.Wizard: I don't have v7 any longer, but here are my numbers on my pokey MacBook Air: v8 2.1 sec, v9 0.43 sec, v10 3.6 sec. I used lp=ListPlot[dat];//AbsoluteTiming since it appears RepeatedTiming wasn't available until v10 (?). Anyway, it looks like you're correct--this may not be v10-specific. – Cassini May 29 '15 at 17:19
  • @David Thanks for the timings. I'll update the tags/title accordingly. – Mr.Wizard May 29 '15 at 17:21
  • 4
    For reference creating essentially the exact same plot with Graphics/Point takes 0.0005 seconds (both versions..). – george2079 May 29 '15 at 17:23
  • 4
    In version 10.1, I get a reduction in the timing by a factor of 2 simply by adding Joined->True to ListPlot. In version 8, the same change reduces the timing almost ten-fold! Apparently, it's harder to make points than to draw lines. Who would have thought... Same thing happens when I use ListLinePlot instead of ListPlot. – Jens May 30 '15 at 03:44
  • It's no better in 10.3.1. I tried this but it wasn't as informative as I'd hoped: Module[{a = AbsoluteTime[]}, Block[{Charting`dbPrint = Print[AbsoluteTime[] - a, " ", #] &}, ListPlot[dat]]] – Simon Woods Feb 20 '16 at 10:29
  • I wondered about injecting timing information into the Trace to help locate the problem area in the huge output, but Trace adds its own delays. – Simon Woods Feb 20 '16 at 10:31
  • 1
    The large size of the trace comes from hundreds of copies of the data: ByteCount[nodat = bigTrace /. Dispatch@Join[{dat -> "DAT", N@dat -> "NDAT"}, Thread[dat -> Table["DAT[[" <> ToString[i] <> "]]", {i, Length@dat}]], Thread[N@dat -> Table["NDAT[[" <> ToString[i] <> "]]", {i, Length@dat}]], {Flatten[N@dat, 1] -> "FlatNDAT"}]] -> 600MB, about three times the size on V9 with the same trick. I get a 40% (time) savings with ndat = Developer`ToPackedArray@N@dat; ListPlot[ndat] // AbsoluteTiming, fwiw, in V10.3.1. Still not easy to examine. – Michael E2 Feb 20 '16 at 15:35
  • @MichaelE2 Thanks for looking at it. I contend that if there are hundreds of copies of the data that itself indicates a problem; this should not be an operation that takes hundreds of steps to prepare. This degree of bloat is simply unacceptable IMO, and it greatly diminishes the touted usefulness of Manipulate type functionality. – Mr.Wizard Feb 20 '16 at 18:51
  • Yes, it seems quite a backslide. It may be because of units and Quantity and other such fancy plot-handling embellishments that the data seems to be processed so many times (550 times in V10, 400 in V9). The same graphics can be produced with Graphics in 0.01 sec. by comparison -- It also was computing the data ranges of the sublists in dat, but I find it hard to believe that takes a long time. There was too much to go through to narrow down just what was taking so long; maybe it is just all of it together. – Michael E2 Feb 20 '16 at 19:35
  • Still present in 11.0.0 - I get a 6.2 GB trace from ByteCount[Trace[ListPlot[dat]]]! Takes about 2.4 sec on my PC. – dr.blochwave Oct 05 '16 at 19:31
  • 1
    @blochwave Oh no it's getting worse! :-O – Mr.Wizard Oct 06 '16 at 00:05
  • @Mr.Wizard plus I see the same on Linux and Windows! – dr.blochwave Oct 06 '16 at 06:56

1 Answers1

3

I'm not sure how accurate this is, but it's a start for analysis at least.

I wrote a timed trace function:

TimedTrace[code_] :=
  With[{data =
     Reap[
       Quiet@TraceScan[
         Sow[AbsoluteTime[] -> #] &, code, ___, 
         Sow[AbsoluteTime[]] &]
       ][[2, 1]]},
   Block[{stack = {}, step = 1, results = <||>},
    Table[
     If[Length@cur != 2,
      results[First@Last@stack] =
       Abs[(cur - First@Last@Last@stack)] -> Last@Last@Last@stack;
      stack = Delete[stack, -1],
      AppendTo[stack, {step, cur}]
      ]; step++,
     {cur, data}
     ];
    KeySort@results
    ]
   ];
TimedTrace~SetAttributes~HoldFirst

which was nowhere near fast enough to analyze the call proper, so I made a tiny version of the data:

dat2 = Table[{x, y}, {x, 2}, {y, RandomReal[9, 5]}];

which takes about .025 seconds to run.

Ran a trace:

trData = TimedTrace[ListPlot[dat2, ImageSize -> 600]];

Took a few seconds to run (owing to all the Sow calls I think). Thing is huge:

In[315]:= trData // Length

Out[315]= 90435

Tried to find calls that took a while:

0.111324->(System`ProtoPlotDump`theme$19304=Charting`ResolvePlotTheme[System`ProtoPlotDump`plottheme$19304,ListPlot])
0.111292->Charting`ResolvePlotTheme[System`ProtoPlotDump`plottheme$19304,ListPlot]
0.111257->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.111248->Charting`ResolvePlotTheme[Automatic,SymbolName[ListPlot]]
0.111199->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.111189->Charting`ResolvePlotTheme[SymbolName[Automatic],ListPlot]
0.111141->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.111130->Themes`makeThemeMethodOption[Themes`SortRulesAndExtract[Join[System`PlotThemeDump`resolvePlotTheme[Automatic,ListPlot],Themes`DefaultStyles[ListPlot]]],ListPlot]
0.101492->(System`ProtoPlotDump`plotstyle$19304=Charting`customStyle[System`ProtoPlotDump`plotstyle$19304,System`ProtoPlotDump`defaultstyle$19304,System`ProtoPlotDump`length$19304,BaseStyle->System`ProtoPlotDump`basestyle$19304])
0.101461->Charting`customStyle[System`ProtoPlotDump`plotstyle$19304,System`ProtoPlotDump`defaultstyle$19304,System`ProtoPlotDump`length$19304,BaseStyle->System`ProtoPlotDump`basestyle$19304]
0.101327->Charting`customStyle[Automatic,{Directive[,AbsoluteThickness[1.6],3.690587378691127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378694657*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378699184*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378703964*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378708102*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378711855*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378715402*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378718887*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378722316*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378725677*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378729106*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378732568*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378737444*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378742241*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378746251*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]},2,BaseStyle->{}]
0.101309->Module[{Charting`CommonDump`basestyle$},{Charting`CommonDump`basestyle$}=OptionValue[{BaseStyle->{}},{BaseStyle}];Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$,{Directive[,AbsoluteThickness[1.6],3.690587378691127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378694657*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378699184*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378703964*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378708102*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378711855*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378715402*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378718887*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378722316*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378725677*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378729106*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378732568*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378737444*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378742241*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378746251*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic]]
0.101276->({Charting`CommonDump`basestyle$19370}=OptionValue[{BaseStyle->{}},{BaseStyle}];Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$19370,{Directive[,AbsoluteThickness[1.6],3.690587378691127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378694657*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378699184*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378703964*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378708102*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378711855*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378715402*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378718887*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378722316*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378725677*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378729106*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378732568*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378737444*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378742241*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378746251*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic])
0.101163->Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$19370,{Directive[,AbsoluteThickness[1.6],3.690587378691127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378694657*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378699184*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378703964*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378708102*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378711855*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378715402*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378718887*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378722316*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378725677*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378729106*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378732568*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378737444*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378742241*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587378746251*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic]
0.123557->(System`ProtoPlotDump`theme$19380=Charting`ResolvePlotTheme[System`ProtoPlotDump`plottheme$19380,ListPlot])
0.123497->Charting`ResolvePlotTheme[System`ProtoPlotDump`plottheme$19380,ListPlot]
0.123456->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.123441->Charting`ResolvePlotTheme[Automatic,SymbolName[ListPlot]]
0.123386->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.123372->Charting`ResolvePlotTheme[SymbolName[Automatic],ListPlot]
0.123318->Charting`ResolvePlotTheme[Automatic,ListPlot]
0.123302->Themes`makeThemeMethodOption[Themes`SortRulesAndExtract[Join[System`PlotThemeDump`resolvePlotTheme[Automatic,ListPlot],Themes`DefaultStyles[ListPlot]]],ListPlot]
0.103445->(System`ProtoPlotDump`plotstyle$19380=Charting`customStyle[System`ProtoPlotDump`plotstyle$19380,System`ProtoPlotDump`defaultstyle$19380,System`ProtoPlotDump`length$19380,BaseStyle->System`ProtoPlotDump`basestyle$19380])
0.103403->Charting`customStyle[System`ProtoPlotDump`plotstyle$19380,System`ProtoPlotDump`defaultstyle$19380,System`ProtoPlotDump`length$19380,BaseStyle->System`ProtoPlotDump`basestyle$19380]
0.103242->Charting`customStyle[Automatic,{Directive[,AbsoluteThickness[1.6],3.690587379138477*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379141967*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379145435*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379149015*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379152376*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379155806*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379160336*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379165260*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379169506*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379173127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379176497*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379180044*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379183421*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379186882*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379190351*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]},2,BaseStyle->{}]
0.103222->Module[{Charting`CommonDump`basestyle$},{Charting`CommonDump`basestyle$}=OptionValue[{BaseStyle->{}},{BaseStyle}];Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$,{Directive[,AbsoluteThickness[1.6],3.690587379138477*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379141967*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379145435*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379149015*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379152376*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379155806*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379160336*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379165260*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379169506*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379173127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379176497*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379180044*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379183421*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379186882*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379190351*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic]]
0.103180->({Charting`CommonDump`basestyle$19448}=OptionValue[{BaseStyle->{}},{BaseStyle}];Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$19448,{Directive[,AbsoluteThickness[1.6],3.690587379138477*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379141967*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379145435*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379149015*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379152376*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379155806*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379160336*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379165260*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379169506*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379173127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379176497*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379180044*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379183421*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379186882*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379190351*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic])
0.103049->Charting`getPlotStyles[Charting`CommonDump`baseStyleSolver[Charting`CommonDump`basestyle$19448,{Directive[,AbsoluteThickness[1.6],3.690587379138477*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379141967*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379145435*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379149015*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379152376*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379155806*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379160336*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379165260*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379169506*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379173127*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379176497*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379180044*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379183421*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379186882*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]],Directive[,AbsoluteThickness[1.6],3.690587379190351*10^9->(Sow[#1,Charting`CommonDump`head[#1]]&)/@Reverse[Charting`CommonDump`new]]}]][2,Automatic]

Obviously all those timings are off as there's no way these took that long. They're probably capturing other stuff, given the shoddy way I wrote the tracer, so let's recalculate the timings for them:

0.111324->0.004826
0.111292->0.00417
0.111257->0.003695
0.111248->0.003625
0.111199->0.00341
0.111189->0.003539
0.111141->0.003517
0.111130->0.003444
0.101492->0.000976
0.101461->0.000876
0.101327->0.000755
0.101309->0.00073
0.101276->0.00075
0.101163->0.000722
0.123557->0.003747
0.123497->0.00333
0.123456->0.003595
0.123441->0.003322
0.123386->0.003348
0.123372->0.003558
0.123318->0.0033
0.123302->0.003568
0.103445->0.001011
0.103403->0.000882
0.103242->0.000744
0.103222->0.00074
0.103180->0.000725
0.103049->0.00072

LHS is what the original timing was, RHS is the First@AbsoluteTiming[expr]. Note that all of these take way too long to be called as often as they are, particularly given how tiny the data was.

I think some of these calls are duplicates as the Total of the RHS is .067 but they're still a big time-suck.

Also note that they're mostly for resolving styling questions.

b3m2a1
  • 46,870
  • 3
  • 92
  • 239
  • Thanks for your answer. I will need time to examine this. No doubt plot themes are a factor here, but I think not the only factor. How do your timings change if you use PlotTheme -> None? – Mr.Wizard Dec 13 '16 at 10:37