goLaTeX - Mein LaTeX-Forum

Mein LaTeX-Forum


Login  | Registrieren
Forum
      Option
[Erweitert]
  • Diese Seite weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Skip cords between funktioniert nicht wie gewollt

 

Philipp_aus_BP
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 18:25     Titel: Skip cords between funktioniert nicht wie gewollt
  Antworten mit Zitat      
Hallo liebe LaTeX-Gemeinde,

mein Problem ist das folgende: Ich möchte eine Grafik erstellen, jedoch fängt eine Spalte des Datensatzes später an (Spalte 4). Dieses müsste mit "skip coords between index={0}{3}" zu lösen sein, allerdings fängt der Plot nicht zu dem gewünschten Zeitpunkt an, sondern ab dem Anfang. Somit ist die rote Linie nicht mehr synchron mit den anderen beiden und die Werte nicht vergleichbar. Wie bekomme ich es hin, dass die ersten (leeren) Werte der roten Linie wirklich übersprungen wird und die Punkte an die richtige Stelle kommen? Ich danke vielmals im Voraus! anbei mein Minimalbeispiel.

Code • Öffne in Overleaf

\usepackage{pgfplots}
\newcounter{groupcount}
\pgfplotsset{
   compat=newest,% Lesetipp: http://texwelt.de/wissen/fragen/19163
   /pgf/number format/1000 sep=\thinspace,% Abschnitt 92.1 Changing display styles in pgfmanual.pdf
   /pgf/number format/min exponent for 1000 sep=4,
    draw group line/.style n args={5}{% Quelle: https://tex.stackexchange.com/questions/71350
        after end axis/.append code={
            \setcounter{groupcount
}{0}
            \pgfplotstableforeachcolumnelement{#1}\of\datatable\as\cell{%
                \def\temp{#2}
                \ifx\temp\cell
                    \ifnum\thegroupcount=0
                        \stepcounter{groupcount}
                        \pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
                        \coordinate [yshift=#4] (startgroup) at (axis cs:\pgfplotsretval,0);
                    \else
                        \pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
                        \coordinate [yshift=#4] (endgroup) at (axis cs:\pgfplotsretval,0);
                    \fi
                \else
                    \ifnum\thegroupcount=1
                        \setcounter{groupcount}{0}
                        \draw [
                            shorten >=-#5,
                            shorten <=-#5
                       
] (startgroup) -- node [anchor=north] {#3} (endgroup);
                    \fi
                \fi
            }
            \ifnum\thegroupcount=1
            \setcounter{groupcount}{0}
            \draw [
               shorten >=-#5,
               shorten <=-#5
           
] (startgroup) -- node [anchor=north] {#3} (endgroup);
            \fi
        }
    }
}

\pgfplotstableread[col sep=comma]{
1,   84.40,   136.44,   ,      2013
2,   102.15,   136.44,   ,      2013
3,   124.75,   176.93,   ,      2014
4,   141.23,   175.18,   ,      2014
5,   172.36,   214.88,   -5.70,   2014
6,   197.14,   213.67,   4.90,   2014
7,   184.26,   211.41,   10.21,   2015
8,   206.19,   216.73,   -5.77,   2015
9,   178.19,   226.07,   45.43,   2015
10,   192.00,   207.53,   74.78,   2015
11,   175.27,   208.02,   34.56,   2016
12,   205.23,   232.20,   23.46,   2016
13,   225.17,   241.23,   39.99,   2016
14,   279.86,   277.36,   15.12,   2016
15,   273.97,   306.60,   4.73,   2017
16,   309.35,   310.56,   17.66,   2017
17,   310.64,   352.00,   3.20,   2017
18,   346.56,   359.00,   13.24,   2017
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
   ymin=1,
   ymax=400,
   ytick={0,50,...,400},
   ylabel=Ranking,
   ymajorgrids,
   y dir=reverse,
   xtick=data,
   width=6.8in,
   legend pos=north west,
   xticklabel={
      \pgfmathparse{mod(\tick+1,4)+1
}
      Q\pgfmathprintnumber[int trunc
]{\pgfmathresult}
   },
   draw group line={[index]4}{2013}{2013}{-92.5ex}{7pt},
   draw group line={[index]4}{2014}{2014}{-92.5ex}{7pt},
   draw group line={[index]4}{2015}{2015}{-92.5ex}{7pt},
   draw group line={[index]4}{2016}{2016}{-92.5ex}{7pt},
   draw group line={[index]4}{2017}{2017}{-92.5ex}{7pt}
]
\addplot[smooth, mark=*, blue] table[x index=0,y index=1] \datatable;
\addplot[smooth, mark=*, green] table[x index=0,y index=2] \datatable;
\legend{Ranking Games, Top Grossing}
\end{axis}



\begin{axis}[
        yticklabel pos=right,% yticklabel auf der rechten Seite
        ymin=-50, ymax=200,
        xtick=\empty,% xticks nicht noch einmal zeichnen
        ylabel=Inflation,
         %ymajorgrids,
         width=6.8in,
         legend pos=north east
      ]
\addplot[smooth, mark=*, red] table[x index=0,y index=3, skip coords between index={0}{3}] \datatable;
\legend{Inflation}
\end{axis}
\end{tikzpicture}
 

Bartman
Forum-Meister
Forum-Meister


Beiträge: 1135
Anmeldedatum: 16.07.09
Wohnort: Hessische Provinz
Version: Windows 7 64 Bit MiKTeX 2.9 32-Bit
     Beitrag Verfasst am: 25.01.2018, 20:04     Titel:
  Antworten mit Zitat      
Achte bitte auf die Vollständigkeit Deines Beispiels.

Ich habe den Eindruck, Du brauchst eher unbounded coords=jump statt skip coords between index={0}{3}. Laut Dokumentation müsstest Du außerdem einen Platzhalter in die betroffenen Zellen einfügen. Bei Overleaf gibt es dann jedoch die Fehlermeldung No shape named endgroup is known. Mein MiKTeX-System habe ich dazu nicht befragt.

Das folgende Beispiel wurde lediglich vervollständigt:

Code • Öffne in Overleaf
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}

\newcounter{groupcount}
\pgfplotsset{
   compat=newest,% Lesetipp: http://texwelt.de/wissen/fragen/19163
   /pgf/number format/1000 sep=\thinspace,% Abschnitt 92.1 Changing display styles in pgfmanual.pdf
   /pgf/number format/min exponent for 1000 sep=4,
    draw group line/.style n args={5}{% Quelle: https://tex.stackexchange.com/questions/71350
        after end axis/.append code={
            \setcounter{groupcount
}{0}
            \pgfplotstableforeachcolumnelement{#1}\of\datatable\as\cell{%
                \def\temp{#2}
                \ifx\temp\cell
                    \ifnum\thegroupcount=0
                        \stepcounter{groupcount}
                        \pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
                        \coordinate [yshift=#4] (startgroup) at (axis cs:\pgfplotsretval,0);
                    \else
                        \pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
                        \coordinate [yshift=#4] (endgroup) at (axis cs:\pgfplotsretval,0);
                    \fi
                \else
                    \ifnum\thegroupcount=1
                        \setcounter{groupcount}{0}
                        \draw [
                            shorten >=-#5,
                            shorten <=-#5
                       
] (startgroup) -- node [anchor=north] {#3} (endgroup);
                    \fi
                \fi
            }
            \ifnum\thegroupcount=1
            \setcounter{groupcount}{0}
            \draw [
               shorten >=-#5,
               shorten <=-#5
           
] (startgroup) -- node [anchor=north] {#3} (endgroup);
            \fi
        }
    }
}

\pgfplotstableread[col sep=comma]{
1,   84.40,   136.44,   ,      2013
2,   102.15,   136.44,   ,      2013
3,   124.75,   176.93,   ,      2014
4,   141.23,   175.18,   ,      2014
5,   172.36,   214.88,   -5.70,   2014
6,   197.14,   213.67,   4.90,   2014
7,   184.26,   211.41,   10.21,   2015
8,   206.19,   216.73,   -5.77,   2015
9,   178.19,   226.07,   45.43,   2015
10,   192.00,   207.53,   74.78,   2015
11,   175.27,   208.02,   34.56,   2016
12,   205.23,   232.20,   23.46,   2016
13,   225.17,   241.23,   39.99,   2016
14,   279.86,   277.36,   15.12,   2016
15,   273.97,   306.60,   4.73,   2017
16,   309.35,   310.56,   17.66,   2017
17,   310.64,   352.00,   3.20,   2017
18,   346.56,   359.00,   13.24,   2017
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
   ymin=1,
   ymax=400,
   ytick={0,50,...,400},
   ylabel=Ranking,
   ymajorgrids,
   y dir=reverse,
   xtick=data,
   width=6.8in,
   legend pos=north west,
   xticklabel={
      \pgfmathparse{mod(\tick+1,4)+1
}
      Q\pgfmathprintnumber[int trunc
]{\pgfmathresult}
   },
   draw group line={[index]4}{2013}{2013}{-92.5ex}{7pt},
   draw group line={[index]4}{2014}{2014}{-92.5ex}{7pt},
   draw group line={[index]4}{2015}{2015}{-92.5ex}{7pt},
   draw group line={[index]4}{2016}{2016}{-92.5ex}{7pt},
   draw group line={[index]4}{2017}{2017}{-92.5ex}{7pt}
]
\addplot[smooth, mark=*, blue] table[x index=0,y index=1] \datatable;
\addplot[smooth, mark=*, green] table[x index=0,y index=2] \datatable;
\legend{Ranking Games, Top Grossing}
\end{axis}



\begin{axis}[
        yticklabel pos=right,% yticklabel auf der rechten Seite
        ymin=-50, ymax=200,
        xtick=\empty,% xticks nicht noch einmal zeichnen
        ylabel=Inflation,
         %ymajorgrids,
         width=6.8in,
         legend pos=north east
      ]
\addplot[smooth, mark=*, red] table[x index=0,y index=3, skip coords between index={0}{3}] \datatable;
\legend{Inflation}
\end{axis}
\end{tikzpicture}
\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

Pilipp_aus_BP
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2018, 11:21     Titel:
  Antworten mit Zitat      
Hallo,

in der Dokumentation habe ich folgendes gefunden:
"If you need unbalanced columns, simply use nan as “empty cell” placeholder. These coordinates will be skipped in plots."

Wenn ich in die leeren Einträge allerdings "nan" eintrage, dann funktioniert dieses nicht. Woran könnte das liegen?

esdd
Forum-Meister
Forum-Meister

Beiträge: 2255
Anmeldedatum: 07.02.10
Wohnort: Stutensee
Version: MiKTeX 2.9
     Beitrag Verfasst am: 26.01.2018, 12:18     Titel:
  Antworten mit Zitat      
Deine zweite axis Umgebung verwendet eine andere Einteilung der x-Achse ;-)

Ergänze bei beiden axis Umgebungen ein einheitliches xmin, beispielsweise xmin=0. Dann kannst Du Dir das skip coords between sparen.

Mit dem Beispiel von Bartman:

Code • Öffne in Overleaf
\documentclass[border=5pt]{standalone}
\usepackage{pgfplots}

\newcounter{groupcount}
\pgfplotsset{
compat=newest,% Lesetipp: http://texwelt.de/wissen/fragen/19163
/pgf/number format/1000 sep=\thinspace,% Abschnitt 92.1 Changing display styles in pgfmanual.pdf
/pgf/number format/min exponent for 1000 sep=4,
draw group line/.style n args={5}{% Quelle: https://tex.stackexchange.com/questions/71350
after end axis/.append code={
\setcounter{groupcount
}{0}
\pgfplotstableforeachcolumnelement{#1}\of\datatable\as\cell{%
\def\temp{#2}
\ifx\temp\cell
\ifnum\thegroupcount=0
\stepcounter{groupcount}
\pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
\coordinate [yshift=#4] (startgroup) at (axis cs:\pgfplotsretval,0);
\else
\pgfplotstablegetelem{\pgfplotstablerow}{[index]0}\of\datatable
\coordinate [yshift=#4] (endgroup) at (axis cs:\pgfplotsretval,0);
\fi
\else
\ifnum\thegroupcount=1
\setcounter{groupcount}{0}
\draw [
shorten >=-#5,
shorten <=-#5
] (startgroup) -- node [anchor=north] {#3} (endgroup);
\fi
\fi
}
\ifnum\thegroupcount=1
\setcounter{groupcount}{0}
\draw [
shorten >=-#5,
shorten <=-#5
] (startgroup) -- node [anchor=north] {#3} (endgroup);
\fi
}
}
}

\pgfplotstableread[col sep=comma]{
1, 84.40, 136.44, , 2013
2, 102.15, 136.44, , 2013
3, 124.75, 176.93, , 2014
4, 141.23, 175.18, , 2014
5, 172.36, 214.88, -5.70, 2014
6, 197.14, 213.67, 4.90, 2014
7, 184.26, 211.41, 10.21, 2015
8, 206.19, 216.73, -5.77, 2015
9, 178.19, 226.07, 45.43, 2015
10, 192.00, 207.53, 74.78, 2015
11, 175.27, 208.02, 34.56, 2016
12, 205.23, 232.20, 23.46, 2016
13, 225.17, 241.23, 39.99, 2016
14, 279.86, 277.36, 15.12, 2016
15, 273.97, 306.60, 4.73, 2017
16, 309.35, 310.56, 17.66, 2017
17, 310.64, 352.00, 3.20, 2017
18, 346.56, 359.00, 13.24, 2017
}\datatable
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymin=1,
ymax=400,
ytick={0,50,...,400},
ylabel=Ranking,
ymajorgrids,
y dir=reverse,
xtick=data,
xmin=0,% <- ergänzt
width=6.8in,
legend pos=north west,
xticklabel={
\pgfmathparse{mod(\tick+1,4)+1
}
Q\pgfmathprintnumber[int trunc]{\pgfmathresult}
},
draw group line={[index]4}{2013}{2013}{-92.5ex}{7pt},
draw group line={[index]4}{2014}{2014}{-92.5ex}{7pt},
draw group line={[index]4}{2015}{2015}{-92.5ex}{7pt},
draw group line={[index]4}{2016}{2016}{-92.5ex}{7pt},
draw group line={[index]4}{2017}{2017}{-92.5ex}{7pt}
]
\addplot[smooth, mark=*, blue] table[x index=0,y index=1] \datatable;
\addplot[smooth, mark=*, green] table[x index=0,y index=2] \datatable;
\legend{Ranking Games, Top Grossing}
\end{axis}

\begin{axis}[
yticklabel pos=right,% yticklabel auf der rechten Seite
ymin=-50, ymax=200,
xtick=\empty,% xticks nicht noch einmal zeichnen
xmin=0,% <- ergänzt
ylabel=Inflation,
%ymajorgrids,
width=6.8in,
legend pos=north east,
]
\addplot[smooth, mark=*, red] table[x index=0,y index=3] \datatable; % <- geändert
\legend{Inflation}
\end{axis}
\end{tikzpicture}
\end{document}
Private Nachricht senden Benutzer-Profile anzeigen

Philipp_aus_Bp
Gast

Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.01.2018, 14:23     Titel:
  Antworten mit Zitat      
Danke! Hat wunderbar funktioniert Smile

Neues Thema eröffnen Neue Antwort erstellen



Options and Permissions
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen
.

goLaTeX ist Teil der goForen
goForen.de goMATLAB.de goLaTeX.de goPCB.de


  Impressum | FAQ | goLaTeX RSS Button RSS-Feed

Copyright © 2008 - 2018 goLaTeX.de