pgfplots soll bestimmte Daten aus filecontents auslesen

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: pgfplots soll bestimmte Daten aus filecontents auslesen

von thor » Mi 25. Feb 2015, 16:38

@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

von esdd » Mi 25. Feb 2015, 16:22

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) 1773 mal betrachtet

von Noch so einer » Mi 25. Feb 2015, 16:09

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).

von thor » Mi 25. Feb 2015, 15:56

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

von Noch so einer » Mi 25. Feb 2015, 15:50

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.

pgfplots soll bestimmte Daten aus filecontents auslesen

von thor » Mi 25. Feb 2015, 15:13

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

Nach oben