Mathematica中的Plotlegend不适用于函数表

时间:2012-08-13 18:49:51

标签: wolfram-mathematica plot

我正在尝试使用Mathematica v8中的PlotLegend绘制带有图例的函数列表。作为一个简单的测试,说明我正在尝试做什么。

<<PlotLegends`
test = Table[f[x], {f, {Sin, Cos, Tan, Log, Exp}}]
Plot[test, {x, 0, 1}, PlotRange -> Full, Axes -> {True, False}, 
PlotStyle -> Thick, AxesOrigin -> {0, 0}, 
PlotLegend -> {"Sin", "Cos", "Tan", "Log", "Exp"}, 
LegendPosition -> {0, -0.5}, LegendShadow -> None]

作为输出

{Sin[x], Cos[x], Tan[x], Log[x], E^x}

Incorrect Legend

但是,如果我明确地将表格放在Plot命令中,我会得到正确的图例。

Plot[{Sin[x], Cos[x], Tan[x], Log[x], Exp[x]}, {x, 0, 1}, 
PlotRange -> Full, Axes -> {True, False}, PlotStyle -> Thick, 
AxesOrigin -> {0, 0}, 
PlotLegend -> {"Sin", "Cos", "Tan", "Log", "Exp"}, 
LegendPosition -> {0, -0.5}, LegendShadow -> None] 

Correct Legend

对于我的实际应用,我将Do循环中的函数列表放在一起,因此后一个Plot命令并不理想。

任何建议都将不胜感激。

干杯, 麦克

1 个答案:

答案 0 :(得分:5)

Plot[test, ...]替换为Plot[Evaluate@test, ...]

问题是Plot将第一个参数取消评估,并且仅在计算点时对其进行评估。因此,当它确定标签时,它只能看到一个参数test,而不是列表,因此它只输出一个标签。 Evaluate@test告诉Mathematica在将test传递给Plot之前对其进行评估,即使已定义Plot以使参数未被评估。这样,Plot可以看到您在test中存储的列表并知道生成多个标签。