pgfplots soll bestimmte Daten aus filecontents auslesen

Tabellen und Grafiken erstellen und anordnen


thor
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Do 25. Okt 2012, 14:43

pgfplots soll bestimmte Daten aus filecontents auslesen

Beitrag von thor »

Hallo liebes Forum,

ich habe hier folgendes kleines Diagramm, was ich darstellen möchte:
\documentclass[12pt]{scrreprt}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{filecontents}

\begin{document}
    \begin{filecontents}{ABC.dat}
        0.43,17
        0.55,9
        0.64,15
        0.48,7
    \end{filecontents}
    
    \begin{tikzpicture}
        \begin{axis}[%
            style=thick,
            minor tick num=1,
            xlabel=\sffamily\footnotesize relativer Marktanteil in \%,
            ylabel=\sffamily\footnotesize Marktwachstum in \%,
            xmin=0,
            xmax=1.2,
            ymin=0,
            ymax=22,
            mark size=4pt,
            legend pos=outer north east,
            legend style={mark size=2pt},
            % scatter
            ]
            \addplot+[mark=*] coordinates {%
                (0.43,17)%
            };

            \addplot+[mark=*] coordinates {%
                (0.55,9)%
            };

            \addplot+[mark=*] coordinates {%
                (0.64,15)%
            };

            \addplot+[mark=*] coordinates {%
                (0.48,7)%
            };
            \legend{A,B,C,D};
         \end{axis}
    \end{tikzpicture}
\end{document}  
Wie man sehen kann, entsprechen die einzelnen Datenpunkte jeweils *einem* xy-Wert aus ABC.dat.

ABC.dat ist dynamisch und wird aus einer Excel-Tabelle generiert.

Wie kann ich pgfplots nun dazubringen je \addplot nur den jeweiligen xy-Wert einer Reihe auszulesen, also Reihe 1: 0.43,17, etc.

Ein
\addplot table[x index=0,y index=2,col sep=comma] {ABC.dat};
würde ja alle xy-Werte von ABC-dat auslesen. Ich hoffe, Ihr versteht, was ich meine :-)

Weiß jemand Rat?

Vielen Dank
Thorsten :D

Noch so einer

Beitrag von Noch so einer »

Wenn ich Dich richtig verstehe, suchst Du einfach nur Option only marks:
\documentclass[12pt]{scrreprt}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepackage{filecontents}

\begin{document}
\begin{filecontents}{ABC.dat}
0.43,17
0.55,9
0.64,15
0.48,7
\end{filecontents}

\begin{tikzpicture}
\begin{axis}[%
style=thick,
minor tick num=1,
xlabel=\sffamily\footnotesize relativer Marktanteil in \%,
ylabel=\sffamily\footnotesize Marktwachstum in \%,
xmin=0,
xmax=1.2,
ymin=0,
ymax=22,
mark size=4pt,
legend pos=outer north east,
legend style={mark size=2pt},
% scatter
]
\addplot table[mark=*,only marks,x index=0,y index=1,col sep=comma] {ABC.dat};
\legend{A,B,C,D};
\end{axis}
\end{tikzpicture}
\end{document}
BTW: Der Index für die zweite Spalte ist 1 nicht 2!

Ansonsten kann man AFAIK zwar angeben, dass n Zeilen am Anfang ignoriert werden. Aber, wie man dann nur eine Zeile lesen kann, weiß ich nicht.

thor
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Do 25. Okt 2012, 14:43

Beitrag von thor »

Gute Lösung, jeder Punkt muss aber in einer verschiedenen Farbe dargestellt werden, weil er das jeweilige Produkt A-D darstellt, deshalb hatte ich auch vier Plots erstellt, vielleicht geht das mit deiner Lösung trotzdem, ich weiß aber leider nicht wie :?

Herzliche Grüße
Thorsten

Noch so einer

Beitrag von Noch so einer »

Unterschiedliche Fraben geht einfach per scatter und scatter src. Das ist in der [d]pgfplots[/d]-Anleitung auch erklärt. Es gibt dazu mehrere Beispiele (in meiner Version ab Seite 102).

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag von esdd »

Mit
restrict expr to domain={\coordindex}{<min>:<max>}
kannst Du einzelne Koordinaten auswählen. Beachten muss man, dass die erste Koordinate den Index 0 hat. Dein Beispiel lässt sich dann einfach über eine Schleife realisieren.
\documentclass[12pt]{scrreprt} 
\usepackage{pgfplots} 
\pgfplotsset{compat=newest} 
\usepackage{filecontents} 

\begin{document} 
\begin{filecontents}{ABC.dat} 
0.43,17 
0.55,9 
0.64,15 
0.48,7 
\end{filecontents} 

\begin{tikzpicture} 
  \begin{axis}[% 
      style=thick, 
      minor tick num=1, 
      xlabel=\sffamily\footnotesize relativer Marktanteil in \%, 
      ylabel=\sffamily\footnotesize Marktwachstum in \%, 
      xmin=0,xmax=1.2, 
      ymin=0,ymax=22, 
      mark size=4pt, 
      legend pos=outer north east, 
      legend style={mark size=2pt}, 
    ]
    \pgfplotsinvokeforeach{0,1,2,3}{
      \addplot+[mark=*]table[col sep=comma,header=false,
        restrict expr to domain={\coordindex}{#1:#1}% Auswahl der Koordinaten
        ]{ABC.dat};
    }
    \legend{A,B,C,D}; 
  \end{axis} 
\end{tikzpicture} 
\end{document}
Gruß
Elke

Bild
Dateianhänge
gl_filtercoordindex.png
gl_filtercoordindex.png (15.54 KiB) 1764 mal betrachtet

thor
Forum-Anfänger
Forum-Anfänger
Beiträge: 48
Registriert: Do 25. Okt 2012, 14:43

Beitrag von thor »

@Elke, @noch so einer,

vielen Dank euch beiden, Elkes Lösung funktioniert schon mal super, scatter muss ich noch ausprobieren!

Klasse Forum hier, wie immer :D

Ich hab den Thread damit auf beantwortet gesetzt.

Herzliche Grüße
Thorsten

Antworten