Несколько директив для listPlot - PullRequest
4 голосов
/ 15 октября 2011
daList={{0.059, 0.298, 0.726, 0.735, 1.461, 2.311, 3.315}, 
        {0.05, 0.404,0.664, 0.782, 1.376, 2.328, 3.432}, 
        {0.087, 0.628, 0.986, 1.187,1.914, 3.481, 4.993}, 
        {0.073, 0.594, 0.975, 1.147, 2.019, 3.417,5.037}, 
        {0.143, 0.821, 1.442, 1.595, 2.983, 4.98, 7.604}, 
        {0.107,0.871, 1.431, 1.684, 2.964, 5.015, 7.394}}


ListPlot[daList,
         Joined -> True,
         PlotRange -> {{1, 7}, {0, 7}}, 
         PlotStyle -> {{Thick, Lighter[Red, .5]}, 
                       {Dashed, Black}, 
                       {Thick,Lighter[Red, .3]}, 
                       {Dashed, Black}, 
                       {Thick,Lighter[Red, .1]}, 
                       {Dashed, Black}},
         Prolog ->{GrayLevel[0.5], EdgeForm[Thickness[.005]], 
                   Rectangle[{1.01, 0.01}, {6.99, 6.99}]}]

enter image description here

Как видите, мне нужно назначить разные директивы для каждой строки.

Мне бы хотелось, чтобы пунктирная черная линия была точками (Joined-> False).

Я пока не могу понять методы для группировки директивы для подсписка .

Спасибо за внимание.

Ответы [ 3 ]

6 голосов
/ 15 октября 2011

Если вы хотите, чтобы каждый другой график был объединен, вы можете просто установить Joined->{True, False}, например,

ListPlot[daList, Joined -> {True, False}, 
 PlotRange -> {{1, 7}, {0, 7}}, 
 PlotStyle -> {{Thick, Lighter[Red, .5]}, {Dashed, Black}, {Thick, 
    Lighter[Red, .3]}, {Dashed, Black}, {Thick, 
    Lighter[Red, .1]}, {Dashed, Black}}, 
 Prolog -> {GrayLevel[0.5], EdgeForm[Thickness[.005]], 
   Rectangle[{1.01, 0.01}, {6.99, 6.99}]}]

, который производит

joined/not joined

Редактировать

Что касается вашего комментария, я думаю, вы всегда можете построить четные и нечетные наборы точек отдельно и объединить их с показом.Итак, для вашего примера:

joinedStyle = {Thick, Lighter[Red, #]} & /@ {.5, .3, .1};
pointStyle = Black;

plot1 = ListPlot[daList[[1 ;; ;; 2]], Joined -> True, PlotStyle -> joinedStyle,
  PlotRange -> {{1,7},{0,7}}];
plot2 = ListPlot[daList[[2 ;; ;; 2]], Joined -> False, PlotStyle -> pointStyle];
Show[plot1, plot2, PlotRange -> {{1, 7}, {0, 7}}, 
  Prolog -> {GrayLevel[0.5], EdgeForm[Thickness[.005]], 
    Rectangle[{1.01, 0.01}, {6.99, 6.99}]}]
4 голосов
/ 15 октября 2011

Вы можете рассмотреть возможность построения ваших графиков отдельно и наложения их на Show.Вот пример, который, надеюсь, не слишком далек от цели.

{d1, d2} = Partition[daList, 2]\[Transpose];
lambda = {541, 550, 560, 570, 580, 590, 600};
colors = {Thick, Red~Lighter~#} & /@ {0.5, 0.3, 0.1};

g1 = ListPlot[d1, Joined -> True, PlotStyle -> colors];
g2 = ListPlot[d2, PlotStyle -> {{Black, AbsolutePointSize[5]}}];

Show[{g1, g2}, PlotRange -> {{1, 7}, {0, 7}}, 
 AspectRatio -> 1/GoldenRatio, Frame -> True, FrameStyle -> 20, 
 FrameTicks -> {{Automatic, 
    None}, {MapIndexed[{#2[[1]], #} &, lambda], Automatic}}, 
 Prolog -> {GrayLevel[0.5], EdgeForm[Thickness[.005]], 
   Rectangle[Scaled[{0, 0}], Scaled[{1, 1}]]}, ImageSize -> 600]

Я думаю, что я почти копирую здесь Хайке, но это не намеренно.Надеемся, что оба ответа что-то добавят.

Существует более полный пример использования Scaled и ImageScaled для этого самого приложения в: https://stackoverflow.com/questions/6303500/mathematica-matlab-like-figure-plot

3 голосов
/ 16 октября 2011

В качестве альтернативы ListPlot, вы можете рассмотреть Graphics

tdata = MapIndexed[{#2[[1]], #1} &, #] & /@ daList;

и

Graphics[
 { GrayLevel[0.7], EdgeForm[AbsoluteThickness[2]], 
  Rectangle[{1.02, 0.05}, {7.2, 7.75}],
  (*lines*)
  AbsoluteThickness[2], 
  Transpose[{Lighter[Red, #] & /@ {0.5, 0.3, 0.1}, 
    Line@tdata[[#]] & /@ {1, 3, 5}}],
  (*points*)
  Black, PointSize[0.016],
  Point@tdata[[#]] & /@ {2, 4, 6}
  }, Axes -> True, PlotRange -> {{1, 7.2}, {0, 7.8}},
 AspectRatio -> 1/GoldenRatio]

дает

enter image description here

или, чтобы дать каждому набору данных другой символ, как на следующем графике:

enter image description here

Код:

Graphics[
 { GrayLevel[.7], EdgeForm[AbsoluteThickness[2]], 
  Rectangle[{1.02, 0.05}, {7.2, 7.75}],

  (*lines*)
  AbsoluteThickness[2], 
  Transpose[{Lighter[Red, #] & /@ {0.5, 0.3, 0.1}, 
    Line@tdata[[#]] & /@ {1, 3, 5}}],

  (*points*)

  Inset[Graphics[{EdgeForm[Black], White, Rectangle[]}, 
      ImageSize -> 8], #] & /@ tdata[[2]],
  Inset[Graphics[{EdgeForm[Black], White, 
       Polygon[{{1, 0}, {0, Sqrt[3]}, {-1, 0}}]}, 
      ImageSize -> 10], #] & /@ tdata[[4]],
  Inset[Graphics[{ EdgeForm[Black], White, Disk[]}, 
      ImageSize -> 9], #] & /@ tdata[[6]]

  }, Axes -> True, PlotRange -> {{1, 7.2}, {0, 7.8}},
 AspectRatio -> 1/GoldenRatio]
...