
Tengo un conjunto de datos en el que las filas indican años y las columnas empresas. Para cada año, quiero trazar la clasificación de la primera empresa frente a las demás.
En el siguiente ejemplo, 2013 está empatado en el quinto lugar (si esto es demasiado complicado, puedo romper el redondeo) ya que las celdas 1 a 8 (por ejemplo, la celda 0) en la fila de 2013 están ordenadas: 0,67 (F3; 1°) > 0,54 ( F6; 2º) > 0,48 (F2; 3º) > 0,46 (F8; 4º) > 0,38 (F1 y F4; articulación 5º). A partir de 2014, la F1 ocupa el sexto lugar.
\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}
A continuación se muestra una versión codificada a mano del resultado que deseo.
Respuesta1
¿Entonces estás buscando algo como lo siguiente? Esperemos que esto se explique por sí mismo...
% 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}