我正在尝试获取赛车圈数的表格,并绘制一个类似于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/