EDITAR

EDITAR

Eu tenho um conjunto de dados para plotar onde gostaria de grupos de N gráficos consecutivos com o mesmo estilo. Opções que considerei:

Aqui está um exemplo, com dois grupos de 3 parcelas, que faz o que eu quero usando este último método:

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
            \begin{axis}[
            ]
                    % First group of identical plots
                    \addplot+ [domain=-1:2, samples=10] {1*x+1};
                    \pgfplotsset{cycle list shift=-1}
                    \addplot+ [domain=-1:2, samples=10] {1*x+2};
                    \pgfplotsset{cycle list shift=-2}
                    \addplot+ [domain=-1:2, samples=10] {1*x+3};
                    % Second group of identical plots
                    \addplot+ [domain=-1:2, samples=10] {2*x+1};
                    \pgfplotsset{cycle list shift=-3}
                    \addplot+ [domain=-1:2, samples=10] {2*x+2};
                    \pgfplotsset{cycle list shift=-4}
                    \addplot+ [domain=-1:2, samples=10] {2*x+3};
                    % and so on... I have a dozen of sets of 5 plots. It would get tedious.
            \end{axis}
    \end{tikzpicture}
\end{document}

Dois grupos de três parcelas

Gostaria de algo mais limpo e automatizado, talvez com este tipo de sintaxe:

cycle multi list={%
        color list\nextlist
        [5 of]mark list
}

Mas não consigo descobrir como!

Editar: também não consigo descobrir um método adequado para construir a lenda, com apenas N parcelas também.

Responder1

Pelo que vi, você interpretou a resposta de percusse paraComo posso plotar duas linhas no mesmo estilo (usando listas de ciclos) com pgfplots?erroneamente. Você não deve adicionar gráficos para um grupo e depois para o próximo grupo e assim por diante. Você deve adicionar o primeiro gráfico de todos os Grupos, depois o segundo e assim por diante:

\addplot 1 from Group 1
\addplot 1 from Group 2
\addplot 1 from Group 3
\addplot 1 from Group 4 ... then
\pgfplotsset{cycle list shift=-<number of Groups>}

Mas isso pode ser transformado em um ambiente, veja se funciona para você (observe que para acertar a legenda basta adicionar legendas nas primeiras parcelas, como abaixo):

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\newcounter{plotscount}\setcounter{plotscount}{0}
\newcommand*{\nextplots}{\stepplots\pgfplotsset{cycle list shift=-\theplotscount}}
\newenvironment{groupofplots}[1]{\def\stepplots{\addtocounter{plotscount}{#1}}}{\setcounter{plotscount}{0}}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[domain=-1:2, samples=10]
      % First plot of each group
      \begin{groupofplots}{2}
        \addplot {1*x+1};\addlegendentry{Style 1}
        \addplot {2*x+1};\addlegendentry{Style 2}
        % Second plot of each group
        \nextplots
        \addplot {1*x+2};
        \addplot {2*x+2};
        % Third plot of each group
        \nextplots
        \addplot {1*x+3};
        \addplot {2*x+3};
      \end{groupofplots}
    \end{axis}
  \end{tikzpicture}
\end{document}

EDITAR

Na verdade, você pode usar cycle multi listexatamente como mencionou:

cycle multi list={color\nextlist [N of]mark list}

Uma desvantagem deste método são as legendas, não consegui fazê-lo funcionar, mas com as entradas deStefan Pinnownos comentários abaixo é possível fornecer legendas vazias para os enredos que possuem o mesmo estilo (com exceção de um, claro).

\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
        domain=-1:2,
        samples=10,
        cycle multi list={color\nextlist [3 of]mark list}]
        \addplot {1*x+1};
        \addplot {1*x+2};
        \addplot {1*x+3};
        \addplot {2*x+4};
        \addplot {2*x+5};
        \addplot {2*x+6};
        \addplot {3*x+7};
        \addplot {3*x+8};
        \addplot {3*x+9};
        \legend{Style 1,,,Style 2,,,Style 3}
    \end{axis}
  \end{tikzpicture}
\end{document}

insira a descrição da imagem aqui

Responder2

Acho que usar o forget plotrecurso resulta em uma solução bastante simples...

Mas como você não forneceu nenhuma tabela de dados fictícia nem nos disse de onde vêm suas entradas de legenda, apenas dou um exemplo aqui, que esperamos que você possa adaptar às suas necessidades. Caso contrário, seja mais específico na pergunta e edite-a de acordo.

Para mais detalhes sobre como a solução funciona, dê uma olhada nos comentários no código.

% used PGFPlots v1.14
    % just some dummy data
    \begin{filecontents}{test.txt}
        x   g1p1    g1p2    g1p3    g2p1    g2p2    g2p3    g3p1    g3p2
        0.0 0.00    0.25    0.50    1.00    1.25    1.50    2.00    2.25
        0.5 0.25    0.50    0.75    1.50    1.75    2.00    3.00    3.25
        1.0 0.50    0.75    1.00    2.00    2.25    2.50    4.00    4.25
        1.5 0.75    1.00    1.25    2.50    2.75    3.00    5.00    5.25
        2.0 1.00    1.25    1.50    3.00    3.25    3.50    6.00    6.25
        2.5 1.25    1.50    1.75    3.50    3.75    4.00    7.00    7.25
    \end{filecontents}
\documentclass[border=5pt]{standalone}
% to provide the `\ifnumequal' command
% (inspired by <http://texwelt.de/wissen/fragen/5066>)
\usepackage{etoolbox}
\usepackage{pgfplots}
\begin{document}
    \begin{tikzpicture}
        \begin{axis}[
            legend pos=north west,
        ]
            % loop through the groups
            \foreach \g in {1,...,2} {
                % loop through the plots of the group
                \foreach \p [count=\pi] in {1,...,3} {
                    % if the current plot loop is the last one, i.e. no 3
                    % then don't forget the plot and add the legend entry
                    \ifnumequal{\pi}{3}{
                        \addplot table [x=x,y=g\g p\p] {test.txt};
                            \addlegendentryexpanded{g\g p\p}
                    % else forget the plot
                    % (that means, use the current cycle list style without
                    %  increasing the counter and don't account for a legend
                    %  entry)
                    }{
                        \addplot+ [forget plot]
                            table [x=x,y=g\g p\p] {test.txt};
                    }
                }
            }
            % here the same in for your last special case where no
            % "group" loop is needed any more
            \foreach \p [count=\pi] in {1,...,2} {
                \ifnumequal{\p}{2}{
                    \addplot table [x=x,y=g3p\p] {test.txt};
                        \addlegendentryexpanded{g3p\p}
                }{
                    \addplot+ [forget plot]
                        table [x=x,y=g3p\p] {test.txt};
                }
            }
        \end{axis}
    \end{tikzpicture}
\end{document}

imagem mostrando o resultado do código acima

informação relacionada