Объединение участков в Mathematica не дает ожидаемого результата - PullRequest
4 голосов
/ 22 ноября 2011

Я пытаюсь объединить 3 функции, полученные на Plot[] и 1 функцию на ParametricPlot[].Мои уравнения таковы:

plota = Plot[{-2 x, -2 Sqrt[x], -2 x^(3/5)}, {x, 0, 1}, PlotLegend -> {"-2 x", "-2 \!\(\*SqrtBox[\(x\)]\)", "-2 \!\(\*SuperscriptBox[\(x\), \(3/5\)]\)"}]
plotb = ParametricPlot[{2.4056 (u - Sin[u]), 2.4056 (Cos[u] - 1)}, {u,0, 1.40138}, PlotLegend -> {"Problem 3"}]
Show[plota, plotb]

Это изображение, которое оно дает:

Combined Graph

Ответы [ 3 ]

6 голосов
/ 22 ноября 2011

Как сказал йода, PlotLegends ужасно.Однако, если вы не возражаете установить вручную стили печати и повторить их позже, ShowLegend может помочь.

 plota = Plot[{-2 x, -2 Sqrt[x], -2 x^(3/5)}, {x, 0, 1}, 
              PlotStyle -> {{Red}, {Blue}, {Orange}}];
 plotb = ParametricPlot[{2.4056 (u - Sin[u]), 2.4056 (Cos[u] - 1)}, {u, 0, 1.40138}, 
                        PlotStyle -> {{Black}}];

А теперь

ShowLegend[Show[plota, plotb], 
          {{{Graphics[{Red, Line[{{0, 0}, {1, 0}}]}], Label1},          
            {Graphics[{Blue, Line[{{0, 0}, {1, 0}}]}], Label2},
            {Graphics[{Orange, Line[{{0, 0}, {1, 0}}]}], Label3}, 
            {Graphics[{Black, Line[{{0, 0}, {1, 0}}]}], Label4}},
           LegendSize -> {0.5, 0.5}, LegendPosition -> {0.5, -0.2}}]

, что даст вам следующее:

enter image description here

Вы также можете написать несколько простых функций, чтобы сделать это немного менее громоздким, если вы часто сталкиваетесь с этой проблемой.

4 голосов
/ 22 ноября 2011

Как указывалось в других ответах, виновником является PlotLegend. Поэтому иногда полезно иметь возможность создавать собственные сюжетные легенды:

plotStyle = {Red, Green, Blue};
labls = {"a", "b", "Let's go"};
f[i_, s_] := {Graphics[{plotStyle[[i]], Line[{{0, 0}, {1, 0}}]}, 
    ImageSize -> {15, 10}], Style[labls[[i]], s]};

Plot[{Sin[x], Sin[2 x], Sin[3 x]}, {x, 0, 2 Pi}, 
 PlotStyle -> plotStyle,
 Epilog ->
  Inset[Framed[Style@Column[{Grid[Table[f[i, 15], {i, 1, 3}]]}]],
   Offset[{-2, -2}, Scaled[{1, 1}]], {Right, Top}],
 PlotRangePadding -> 1
 ]

enter image description here

4 голосов
/ 22 ноября 2011

Ну, коренной причиной ошибки является пакет PlotLegends, который является ужасным, с ошибками. Удаляя это, Show объединяет их правильно:

plota = Plot[{-2 x, -2 Sqrt[x], -2 x^(3/5)}, {x, 0, 1}]
plotb = ParametricPlot[{2.4056 (u - Sin[u]), 2.4056 (Cos[u] - 1)}, {u,
    0, 1.40138}]
Show[plota, plotb]

enter image description here

Вы можете увидеть решение Саймона здесь для идей по маркировке ваших различных кривых без использования PlotLegends. Этот ответ Джеймса также демонстрирует, почему PlotLegends имеет такую ​​репутацию ...


Вы все еще можете что-то спасти с помощью пакета PlotLegends. Вот пример использования ShowLegends, который вы можете изменить по своему вкусу

colors = {Red, Green, Blue, Pink};
legends = {-2 x, -2 Sqrt[x], -2 x^(3/5), "Problem 3"};

plota = Plot[{-2 x, -2 Sqrt[x], -2 x^(3/5)}, {x, 0, 1}, 
   PlotStyle -> colors[[1 ;; 3]]];
plotb = ParametricPlot[{2.4056 (u - Sin[u]), 2.4056 (Cos[u] - 1)}, {u,
     0, 1.40138}, PlotStyle -> colors[[4]]];
ShowLegend[
 Show[plota, 
  plotb], {Table[{Graphics[{colors[[i]], Thick, 
      Line[{{0, 0}, {1, 0}}]}], legends[[i]]}, {i, 4}], 
  LegendPosition -> {0.4, -0.15}, LegendSpacing -> 0, 
  LegendShadow -> None, LegendSize -> 0.6}]

enter image description here

...