我正在尝试使用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命令并不理想。
任何建议都将不胜感激。
干杯, 麦克
答案 0 :(得分:5)
将Plot[test, ...]
替换为Plot[Evaluate@test, ...]
。
问题是Plot将第一个参数取消评估,并且仅在计算点时对其进行评估。因此,当它确定标签时,它只能看到一个参数test
,而不是列表,因此它只输出一个标签。 Evaluate@test
告诉Mathematica在将test
传递给Plot
之前对其进行评估,即使已定义Plot
以使参数未被评估。这样,Plot可以看到您在test
中存储的列表并知道生成多个标签。