
Я строю групповой график с общей легендой, помещенной в узел под графиком. Ниже приведен MWE, который воссоздает мою проблему.
\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{pgfplots.groupplots}
\pgfplotsset{compat = 1.12}
\begin{document}
\centering
\begin{figure}
\begin{tikzpicture}{fig3}
\begin{groupplot}[
legend columns=4,
legend entries={{\tiny Hold All},{\tiny Come and Go},{\tiny Random},{\tiny +Resources},{\tiny ++Resources},{\tiny ++ResourcesPT},{\tiny ++ResourcesSM},{\tiny ++ResourcesBM}},
legend to name=Fig3Legend,
group style={
group name = fig3_plots,
group size=3 by 1,
xlabels at=edge bottom,
ylabels at=edge left
},
width=\textwidth,
legend style={draw=none},
xlabel = {\footnotesize $\alpha$},
ylabel = {\footnotesize Avg Portfolio Value},
]
\nextgroupplot[title={\scriptsize +Resources},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0,
xtick={1000,2000,3000,4000}]
\addplot+[black, mark=o,line join=round, mark repeat=50] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[black, mark=x,line join=round, mark repeat=50] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[black, mark=|,line join=round, mark repeat=50] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[black, mark=square,line join=round, mark repeat=50] table[col sep=comma, y=Plus, x=Alpha]{ElicitedFixedAlpha.csv};
\nextgroupplot[title={\scriptsize ++Resources (Empirical CDF)},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0]
\addplot+[black, mark=o,line join=round, mark repeat=50] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=x,line join=round, mark repeat=50] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=|,line join=round, mark repeat=50] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=square,line join=round, mark repeat=50] table[col sep=comma, y=PlusPlus, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\nextgroupplot[title={\scriptsize ++Resources (Elicited CDFs)},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0]
\addplot+[black, mark=o,line join=round, mark repeat=50] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=x,line join=round, mark repeat=50] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=|,line join=round, mark repeat=50] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=triangle,line join=round, mark repeat=50] table[col sep=comma, y=PlusPlusPT, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=square,line join=round, mark repeat=50] table[col sep=comma, y=PlusPlusSM, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[black, mark=asterisk,line join=round, mark repeat=50] table[col sep=comma, y=PlusPlusBM, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\end{groupplot}
\node (fig3_Legend) at ($(fig3_plots c2r1.center)-(0,2.5cm)$){\ref{Fig3Legend}};
\end{tikzpicture}
\caption{Fixed $\alpha$ Values}
\label{FixedAlphas}
\end{figure}
\end{document}
Данные доступны по адресу
Он выдает следующий вывод
Все бы хорошо, если бы не отсутствие последних двух легенд.
В определении группового графика у меня есть
legend entries={{\tiny Hold All},{\tiny Come and Go},{\tiny Random},{\tiny +Resources},{\tiny ++Resources},{\tiny ++ResourcesPT},{\tiny ++ResourcesSM},{\tiny ++ResourcesBM}},
Но как вы можете видеть на изображении, последних двух нет. Соответствующие ряды данных есть на графике... их трудно увидеть, так как они все накладываются друг на друга на самом правом графике, но они есть. Так почему же не отображаются записи легенды?
решение1
В .log
файле вы найдете предупреждения
LaTeX Warning: Label `Fig3Legend' multiply defined.
LaTeX Warning: Label `Fig3Legend' multiply defined.
Это означает, что Fig3Legend
метка применяется ко всем трем groupplots
, и поэтому \ref
будет указывать только на последний из них, последний groupplot
. Поскольку у него всего шесть графиков, вы получаете шесть записей в легенде. Один из обходных путей показан ниже. Сначала я определяю восемь стилей для графиков (для удобства, это не является строго необходимым), а в последнем groupplot
я добавляю два \addlegendimage
, которые используются для добавления дополнительных записей в легенду.
Обратите внимание, что я также немного изменил стиль +Resources
и ++Resources
, чтобы было меньше шансов на путаницу. У вас было три строки с одинаковым стилем.
\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\usetikzlibrary{pgfplots.groupplots}
\pgfplotsset{compat = 1.12}
\begin{document}
\begin{tikzpicture}[
HA/.style={black, mark=o,line join=round, mark repeat=50},
CAG/.style={black, mark=x,line join=round, mark repeat=50},
Rnd/.style={black, mark=|,line join=round, mark repeat=50},
P/.style={black, densely dashed, mark=square,line join=round, mark repeat=50},
PP/.style={black, thick, mark=square,line join=round, mark repeat=50},
PPPT/.style={black, mark=triangle,line join=round, mark repeat=50},
PPSM/.style={black, mark=square,line join=round, mark repeat=50},
PPBM/.style={black, mark=asterisk,line join=round, mark repeat=50}]
\begin{groupplot}[
legend columns=4,
legend style={nodes={font=\tiny}},
legend entries={Hold All,Come and Go,Random,+Resources,++Resources,++ResourcesPT,++ResourcesSM,++ResourcesBM},
legend to name=Fig3Legend,
group style={
group name = fig3_plots,
group size=3 by 1,
xlabels at=edge bottom,
ylabels at=edge left
},
width=\textwidth,
legend style={draw=none},
xlabel = {\footnotesize $\alpha$},
ylabel = {\footnotesize Avg Portfolio Value},
]
\nextgroupplot[title={\scriptsize +Resources},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0,
xtick={1000,2000,3000,4000}]
\addplot+[HA] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[CAG] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[Rnd] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlpha.csv};
\addplot+[P] table[col sep=comma, y=Plus, x=Alpha]{ElicitedFixedAlpha.csv};
\nextgroupplot[title={\scriptsize ++Resources (Empirical CDF)},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0]
\addplot+[HA] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[CAG] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[Rnd] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[PP] table[col sep=comma, y=PlusPlus, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\nextgroupplot[title={\scriptsize ++Resources (Elicited CDFs)},
y tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
footnotesize,
x tick label style={
font=\tiny,
/pgf/number format/.cd,
fixed,
fixed zerofill,
precision=0,
/tikz/.cd
},
ymin=0]
\addplot+[HA] table[col sep=comma, y=HoldAll, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[CAG] table[col sep=comma, y=ComeAndGo, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[Rnd] table[col sep=comma, y=Random, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addlegendimage{P}
\addlegendimage{PP}
\addplot+[PPPT] table[col sep=comma, y=PlusPlusPT, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[PPSM] table[col sep=comma, y=PlusPlusSM, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\addplot+[PPBM] table[col sep=comma, y=PlusPlusBM, x=Alpha]{ElicitedFixedAlphaPlusPlus.csv};
\end{groupplot}
\node (fig3_Legend) at ($(fig3_plots c2r1.center)-(0,2.5cm)$){\ref{Fig3Legend}};
\end{tikzpicture}
\end{document}