
У меня есть набор данных, в котором строки указывают годы, а столбцы — фирмы. Для каждого года я хочу построить график рейтинга первой фирмы по отношению к остальным.
В примере ниже 2013 год делит 5-е место (если это слишком сложно, я могу разорвать округление), поскольку ячейки с 1 по 8 (например, ячейка 0) в строке 2013 года упорядочены следующим образом: 0,67 (F3; 1-е) > 0,54 (F6; 2-е) > 0,48 (F2; 3-е) > 0,46 (F8; 4-е) > 0,38 (F1 и F4; совместное 5-е). Начиная с 2014 года, F1 занимает 6-е место.
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\pgfplotstableread[col sep=tab,row sep=\\,header=false]{
% year F1 F2 F3 F4 F5 F6 F7 F8
2013 0.38 0.48 0.67 0.38 0.34 0.54 0.32 0.46 \\
2014 0.37 0.48 0.70 0.39 0.34 0.54 0.31 0.50 \\
2015 0.35 0.44 0.68 0.38 0.30 0.53 0.28 0.49 \\
2016 0.33 0.43 0.67 0.35 0.29 0.51 0.29 0.47 \\
}\datatable
\begin{tikzpicture}
\begin{axis}[
ylabel = rank, y dir = reverse,
]
\addplot table [x expr=\coordindex, y expr= % what goes here?
] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
Ниже представлена закодированная вручную версия желаемого мной результата.
решение1
Итак, вы ищете что-то вроде следующего? Надеюсь, это само собой разумеется...
% used PGFPlots v1.16
\documentclass[border=5pt]{standalone}
\usepackage{pgfplotstable}
\pgfplotsset{
compat=1.3,
/pgf/declare function={
MyRank(\a,\b,\c,\d,\e,\f,\g,\h) =
ifthenelse( \a == min(\a,\b,\c,\d,\e,\f,\g,\h), 1,
ifthenelse( \b == min(\a,\b,\c,\d,\e,\f,\g,\h), 2,
ifthenelse( \c == min(\a,\b,\c,\d,\e,\f,\g,\h), 3,
ifthenelse( \d == min(\a,\b,\c,\d,\e,\f,\g,\h), 4,
ifthenelse( \e == min(\a,\b,\c,\d,\e,\f,\g,\h), 5,
ifthenelse( \f == min(\a,\b,\c,\d,\e,\f,\g,\h), 6,
ifthenelse( \g == min(\a,\b,\c,\d,\e,\f,\g,\h), 7,
8)))))));
},
}
% (please note that I have changed the first value of F5)
\pgfplotstableread{
year F1 F2 F3 F4 F5 F6 F7 F8
2013 0.38 0.48 0.67 0.38 0.30 0.54 0.32 0.46
2014 0.37 0.48 0.70 0.39 0.34 0.54 0.31 0.50
2015 0.35 0.44 0.68 0.38 0.30 0.53 0.28 0.49
2016 0.33 0.43 0.67 0.35 0.29 0.51 0.29 0.47
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ylabel=rank,
y dir=reverse,
xtick distance=1,
ytick distance=1,
]
\addplot table [
x expr=\coordindex,
y expr={
MyRank(
\thisrow{F1},
\thisrow{F2},
\thisrow{F3},
\thisrow{F4},
\thisrow{F5},
\thisrow{F6},
\thisrow{F7},
\thisrow{F8}
)
}
] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}