我正在尝试获取赛车圈数的表格,并绘制一个类似于http://www.fia.com/en-GB/sport/championships/f1/2010/bahrain/Pages/lap_chart.aspx的圈数图。

每行对应一个圈,第一圈位于第一行。在每行中按开始/结束行的顺序列出了汽车编号
这张 table 可能看起来像这样(4站比赛,6圈:

1 3 2 4
1 3 2 4
1 3 4 2
3 1 4 2
3 1 4 2
3 4 1 2

在上面的示例中,顺序是第一圈之后的1、3、2、4,到6圈比赛结束时,赛车3获胜,赛车4位居第二,依此类推。

错误地绘制很容易,我这样做是:

ListLinePlot[Table[Position[data,x],{x,4}]]

这的确产生了一个圈速表,但是它在底部有1st位置,在顶部有4th位置,而我真正需要的是y轴以4-3-2-1运行,所以1st位置在顶部。

如何反转y轴,使其从1(顶部)到n(底部)?

最佳答案

只需使用象限4解决屏幕上的位置问题。

这也适用于DNF! (未完成的驱动程序)。

第一位以y = -1绘制,第二位以y = -2绘制,依此类推。
请注意下面的y中的-y如何替换{{lap_, y_} :> {lap - 1, -y}}
lap减少了1,因为我包括了起始位置的数据(lap =零)。

进行较小的重写,以与不同数量的驾驶员和赛车圈配合使用,并重新格式化代码以提高可读性。 -威兹德先生

data =
  {{1, 3, 2, 4},
   {1, 3, 2, 4},
   {1, 3, 4, 2},
   {3, 1, 4, 2},
   {3, 1, 4, 2},
   {3, 4, 1, 2}};

{p, n} = {Max@data, Length@data};

ticks = {#, #} &@Array[{-#, #} &, p];
ticks[[All, 1, 2]] = {"Pole", "Winner"};

PrependTo[data, Range@p];  (* add starting position *)

ListLinePlot[
 Replace[
   Array[data~Position~# &, p],
   {lap_, y_} :> {lap - 1, -y},
   {2}
 ],
 Frame -> True,
 FrameLabel ->
  {"Laps Completed",
   "Starting Positions",
   "Laps Completed",
   "Final Positions"},
 GridLines -> {Range[0, n + 1], None},
 FrameTicks -> {ticks, {All, All}},
 PlotRange -> {Automatic, {-.7, -.3 - p}},
 PlotStyle -> Thickness[.01]
]

在这种情况下,第1辆车(在杆位发车的那辆)在完成最后两圈之前就退出了比赛。请注意,#3赛车会自动前进一个位置。

关于wolfram-mathematica - 使用ListLinePlot的赛车运动圈图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5655224/

10-12 18:29