这是我第一次发帖,所以如果在现有问题的基础上问一个新问题是不好的,我向你道歉。
我正在尝试创建一个类似于这里所示的“圈图”:
Motorsport Lap Chart using ListLinePlot
我的需求有一点曲折。我正在为一项不同的运动绘制圈位图,我的数据结构也不同。数据按车队和车队在完成每一圈时所处的位置列出。例如,下面是一个数据示例:
BRA = {03, 01, 01, 01};
CAN = {14, 14, 06, 10};
CRO = {10, 08, 11, 12};
DEN = {05, 05, 04, 11};
FRA = {13, 11, 14, 13};
GBR = {04, 02, 02, 02};
GER = {15, 15, 12, 09};
GRE = {16, 16, 16, 16};
IRL = {01, 03, 08, 06};
NOR = {02, 04, 09, 05};
NZL = {06, 06, 05, 08};
POL = {08, 07, 03, 03};
POR = {11, 13, 15, 15};
SUI = {07, 09, 10, 07};
SWE = {09, 10, 07, 04};
USA = {12, 12, 13, 14};在这个例子中,巴西在第一圈结束时排名第三,然后在第二圈结束时进入第一位,在第三圈保持位置,然后到达终点。
我已经通过手动重新键入数据的格式来创建所需的图表,以适合前面示例中发布的代码,但必须有更有效的方法。如有任何建议,欢迎光临。
还有一个问题..。目前,在给定的一圈结束时,位置是均匀分布的,然而在真正的比赛中,第一名领先第二名20秒,第二名可能领先第三名10秒。有没有办法画出每个位置,以反映下一个竞争者的相对领先时间?
这是我目前的工作代码:
data = {{09, 10, 01, 06, 04, 11, 14, 12, 15, 03, 13, 16, 05, 02, 07, 08},
{01, 06, 09, 10, 04, 11, 12, 03, 14, 15, 05, 16, 13, 02, 07, 08},
{01, 06, 12, 04, 11, 02, 15, 09, 10, 14, 03, 07, 16, 05, 13, 08},
{01, 06, 12, 15, 10, 09, 14, 11, 07, 02, 04, 03, 05, 16, 13, 08}};
{p, n} = {Max@data, Length@data};
ListLinePlot[
Replace[Array[data~Position~# &,
p], {lap_, y_} :> {lap - 1, -y}, {2}],
Frame -> True,
FrameLabel -> {"Rounding", "Position", "Rounding",
"Final Positions"}, GridLines -> {Range[0, n + 1], None},
FrameTicks -> {
{{{-1, "IRL"}, {-2, "NOR"}, {-3, "BRA"}, {-4, "GBR"}, {-5,
"DEN"}, {-6, "NZL"}, {-7, "SUI"}, {-8, "POL"}, {-9,
"SWE"}, {-10, "CRO"}, {-11, "POR"}, {-12, "USA"}, {-13,
"FRA"}, {-14, "CAN"}, {-15, "GER"}, {-16, "GRE"}},
{{-1, "1 BRA"}, {-2, "2 GBR"}, {-3, "3 POL"}, {-4, "4 SWE"}, {-5,
"5 NOR"}, {-6, "6 IRL"}, {-7, "7 SUI"}, {-8, "8 NZL"}, {-9,
"9 GER"}, {-10, "10 CAN"}, {-11, "11 DEN"}, {-12,
"12 CRO"}, {-13, "13 FRA"}, {-14, "14 USA"}, {-15,
"15 POR"}, {-16, "16 GRE"}}},
{{{0, "W1"}, {1, "L1"}, {2, "W2"}, {3, "F"}},
{{0, "W1"}, {1, "L1"}, {2, "W2"}, {3, "F"}}}},
PlotRange -> {Automatic, {-.7, -.3 - p}},
PlotStyle -> Thickness[.003]]发布于 2012-08-01 09:10:50
在这里,您将了解如何以最少的手动工作重新格式化数据。
tot = {
BRA = {03, 01, 01, 01}, CAN = {14, 14, 06, 10}, CRO = {10, 08, 11, 12},
DEN = {05, 05, 04, 11}, FRA = {13, 11, 14, 13}, GBR = {04, 02, 02, 02},
GER = {15, 15, 12, 09}, GRE = {16, 16, 16, 16}, IRL = {01, 03, 08, 06},
NOR = {02, 04, 09, 05}, NZL = {06, 06, 05, 08}, POL = {08, 07, 03, 03},
POR = {11, 13, 15, 15}, SUI = {07, 09, 10, 07}, SWE = {09, 10, 07, 04},
USA = {12, 12, 13, 14}}那就这么做
data = Ordering /@ Transpose@tot并在您提到的问题中使用@DavidCarraher的答案。

编辑
如果你有每个团队的计时(每圈),下面是绘制时间标度图的框架:
lapTimes = RandomReal[{0, 1}, {10, 5}];(*ten teams,five laps*)
ListLinePlot[Accumulate /@ lapTimes, PlotRange -> {{1, 5}, All}]

最后较低的一行是赢家(消耗的时间较少)
https://stackoverflow.com/questions/11751062
复制相似问题