【问题标题】:How do I label different curves in Mathematica?如何在 Mathematica 中标记不同的曲线?
【发布时间】:2011-11-05 11:38:34
【问题描述】:

如何分别标记这些行:

Plot[{{5 + 2 x}, {6 + x}}, {x, 0, 10}]

【问题讨论】:

标签: wolfram-mathematica plot label


【解决方案1】:

有一些不错的代码可以让您在an answerHow to annotate multiple datasets in ListPlots 中动态地执行此操作。

技术说明Labeling Curves in Plots 中还定义了一个LabelPlot 命令

当然,如果你没有太多的图片要制作, 那么使用Epilog手动添加标签就不难了,例如

fns[x_] := {5 + 2 x, 6 + x}; 
len := Length[fns[x]];

Plot[Evaluate[fns[x]], {x, 0, 10}, 
 Epilog -> Table[Inset[
    Framed[DisplayForm[fns[x][[i]]], RoundingRadius -> 5], 
    {5, fns[5][[i]]}, Background -> White], {i, len}]]

事实上,您可以使用Locators 执行类似的操作,让您可以将标签移动到任何您想要的位置:

DynamicModule[{pos = Table[{1, fns[1][[i]]}, {i, len}]},
 LocatorPane[Dynamic[pos], Plot[Evaluate[fns[x]], {x, 0, 10}],
  Appearance -> Table[Framed[Text@TraditionalForm[fns[x][[i]]], 
                  RoundingRadius -> 5, Background -> White], {i, len}]]]

在上面我使定位器采用标签的形式,尽管也可以像上面一样保留Epilog 并使用不可见的定位器来控制位置。 定位器也可以被约束(使用Dynamic 的第二个参数)到适当的曲线......但这并不是必需的。

作为上面的代码示例,带有手动移动标签的函数:

fns[x_] := {Log[x], Exp[x], Sin[x], Cos[x]};

【讨论】:

  • +1。将定位器限制在线条上可能不是必要,但这样做非常酷。尝试将Dynamic 表达式更改为Dynamic[pos,(pos=MapIndexed[{##}/.{{x_, y_}, {i_}}:>{x,fns[x][[i]]}&,#])&]
  • @WReach:你就是我离开这个练习的那种感兴趣的读者!您的代码运行良好。
  • @Simon,非常感谢,它看起来很棒。
【解决方案2】:

您可以通过加载 PlotLegends 包在绘图中插入图例

<<PlotLegends`;
Plot[{5+2 x,6+x},{x,0,10},
    PlotLegend->{"5+2x","6+x"},LegendShadow->None,
    LegendPosition->{0.3,-0.5},LegendSpacing->-0,LegendSize->0.5]


但是,我还要指出我不喜欢这个包,主要是因为它非常违反直觉,有太多选项,并且不像 Mathematica 的大多数函数那样提供开箱即用的干净体验。您将需要摆弄一些选项来获得您想要的东西。但是,在您确实需要图例的绘图和图表中,这可能会很方便。另请参阅 this answerthis question 的 cmets。

【讨论】:

  • PlotLegends 包不是最优的。请参阅comments to this answerthis SO question
  • @Simon:我知道......我的答案有第二部分,我在 5 分钟窗口之前删除了它,因为我不想通过任何判断。它是这样说的:" 但是,我还要指出我不喜欢这个包,主要是因为它非常违反直觉,有太多选项,并且不像 Mathematica 的大多数函数那样提供开箱即用的干净体验。您将需要摆弄一些选项来获得您想要的东西。但是,在您确实需要图例的绘图和图表中,这可能会很方便。"
  • 在您阅读我的回复后,我将删除此答案。但是,请添加上面的这两个链接作为对问题的评论(还要注意它有问题)。也许他想要的只是一个传奇,人们有办法让请求复杂化。
  • 在这里留下答案!最好有标准答案并讨论其优缺点。
  • 因为PlotLegends 低于标准,我之前使用过LevelScheme 的能级图部分来创建图例。它不是自动化的,也不是简单的,但它运作良好。
【解决方案3】:

Mathematica 9 现在提供了包含图例的简单方法。

Plot[{{5 + 2 x}, {6 + x}}, {x, 0, 10}, PlotLegends -> "Expressions"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2021-12-19
    • 2020-05-28
    相关资源
    最近更新 更多