1

我正在尝试使用 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}

不正确的图例

但是,如果我明确地将表格放在 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] 

正确的图例

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

任何建议将不胜感激。

干杯,迈克

4

1 回答 1

6

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

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

于 2012-08-13T19:06:41.900 回答