5
$\begingroup$

Consider this example:

Plot[Table[BesselJ[n, x], {n, 2}], {x, 0, 10}, 
 PlotLegends -> {"n=1", "n=2"}, Evaluated -> True]

The results in MMA v9 & V10 are:

V9:

enter image description here

V10:

enter image description here

Any idea why V10 can't pick up all PlotLegends? Thanks.

$\endgroup$
5
  • 3
    $\begingroup$ Probably a(nother) bug $\endgroup$ Dec 15, 2014 at 19:28
  • 1
    $\begingroup$ Evaluate does work: Plot[Evaluate@Table[BesselJ[n, x], {n, 2}], {x, 0, 10}, PlotLegends -> {"n=1", "n=2"}], which is also a workaround. $\endgroup$ Dec 15, 2014 at 19:38
  • 2
    $\begingroup$ For me it is still undocumented so I would not call it a bug :) $\endgroup$
    – Kuba
    Dec 15, 2014 at 19:43
  • $\begingroup$ @Kuba, the case here is V9 and V10 giving two different results. it may be good to call it bug -:) $\endgroup$ Dec 15, 2014 at 19:47
  • $\begingroup$ @Algohi I can't agree. Even mod would not ;) $\endgroup$
    – Kuba
    Dec 15, 2014 at 20:06

2 Answers 2

3
$\begingroup$

I am in the middle of the long process of Tracing this issue. I don't yet have a patch but I can point to a part of the code that affects this. The function is:

Legending`LegendDump`plotLegendParser

Within its long definition we have a piece:

Legending`LegendDump`length = Switch[Legending`LegendDump`tag,
  0, Legending`LegendDump`optDimensions,
  _Integer, Legending`LegendDump`optDimensions[[Legending`LegendDump`tag]],
  "Generic", 
  If[Legending`LegendDump`arglength === Null, Switch[Legending`LegendDump`argexp,
    Null, 0,
    _List, Length[Legending`LegendDump`argexp],
    _, 1], Legending`LegendDump`arglength]]

This is where the number of functions is determined for the sake of legend generation. The critical part here is:

Length[Legending`LegendDump`argexp]

Which in the case of the example in the question expands to:

Length[{HoldForm[Table[BesselJ[n, x], {n, 2}]]}]

The plot function is being passed unevaluated (held by HoldForm) to Legending`LegendDump`plotLegendParser, which is exactly the sort of problem I expected. I have confirmed that replacing Length[. . .] in this definition with 2 causes the legend to be draw properly for this example, but I have not yet figured out how to determine that value automatically.

This answer is a work in progress but I wanted to get this down before I forget it. It may also serve as a starting point for anyone else who wishes to tackle the problem.

$\endgroup$
2
$\begingroup$

Not really an idea or insight, but a workaround (on 10.0 for Mac OS X x86 (64-bit) (September 10, 2014);

Plot[Table[BesselJ[n, x], {n, 2}], {x, 0, 10},  
 PlotStyle -> {Red, Blue},  
 PlotLegends -> LineLegend[{Red, Blue}, {"n=1", "n=2"}],  
 Evaluated -> True]

enter image description here

The "Help" is not really a help:

enter image description here enter image description here

except the workaround I can not offer an explanation for this behavior.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.