多重指令用于ListPlot

4
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

如您所见,我需要给每一行分配不同的指令。

我希望将虚线黑线变为点线(连接 -> 假)。

我还不能掌握对子列表进行分组指令的方法。

谢谢您的关注。


我已经读了两遍,但仍然难以想象。你能否描述一下你想要的画面吗? - Mr.Wizard
谢谢,对不起;可能很明显,但我思维不太清晰。 - Mr.Wizard
更好吗?我已经删除了框架刻度,我将单独询问这部分。基本上,我正在寻求紧凑代码的同时,每两个子列表中有一个子列表的点! - 500
好的,那么上面的图片是正确的,你只是想要一个更简洁的方法吗?实际上,我还是不明白:“除了在两个子列表中有一个子列表有点之外。”也许今天我只是没用的。 :-) - Mr.Wizard
我认为Heike理解了我没有理解的内容。她的回复中是否有任何遗漏? - Mr.Wizard
@Mr.Wizard,轨迹记录总是会证明我的问题不够清晰 :-) 我希望只有两种指令,所以daList有5个子列表。1、3、5可以有类似的指令(粗线条和颜色列表),而2、4、6则是点(大小和颜色可调整)。 - 500
3个回答

6
如果您想要将每个其他图形连接起来,只需要设置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}]}]

这将涉及到IT技术,以下是翻译内容:

该操作会导致

已连接/未连接

编辑

关于您的评论,我想您可以分别绘制偶数集和奇数集的点,然后使用show将它们组合起来。因此,对于您的示例:

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}]}]

谢谢!问题是我实际上有10*2条曲线要绘制。我希望在列表的奇数位置只有两组Directive One(粗线和颜色逐渐变浅),偶数位置只有一组黑色的Directive One。我想为具有奇数编号的子集设计一些指令。你有什么好的建议吗? - 500

4
你可以考虑分别构建你的绘图,并使用 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]

我觉得我几乎在抄袭Heike,但这并不是故意的。希望两个答案都能有所贡献。
在这个应用程序中,ScaledImageScaled的使用有一个更完整的示例:https://stackoverflow.com/questions/6303500/mathematica-matlab-like-figure-plot

太整洁了!谢谢,有什么建议可以让那个灰色框完美地适配图形吗? :-) - 500
@500,你可以使用“Scaled”来适应范围(见编辑)。 “Red〜Lighter〜#”只是“Lighter [Red,#]”的中缀符号表示。其余部分我想你已经知道了。由于你将拥有许多不止三行,最后你可能需要像这样的东西:“colors”的表格:Table[{Thick,Lighter[Red,i]},{i,0.5,0,0.5 / Length@d1}] - Mr.Wizard
巫师,谢谢您。我必须说,“缩放”让我感到困惑。我不知道在您的解决方案中应该将矩形缩放到什么大小。而且我不确定它是否会使黑边缘均匀。也就是说,缩放矩形是否包括边缘? - 500
1
@Mr.Wizard:鉴于我的编辑是在您的帖子之后,我认为我是无意中抄袭了您,而不是反过来。我是在回应500的评论,完全没有注意到您的答案。 - Heike
@belisarius,哈哈抱歉 "@Mr Wizzard,不错" ;-) - 500
显示剩余6条评论

3
作为 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]

提供:

输入图像描述

或者,为每个数据集分配不同的符号,如下图所示:

输入图像描述

代码:

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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接