pgfplots: Darstellung von doppelt vorhandenen x-Werten

Tabellen und Grafiken erstellen und anordnen


prankenandi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 60
Registriert: Di 8. Apr 2014, 13:59

pgfplots: Darstellung von doppelt vorhandenen x-Werten

Beitrag von prankenandi »

Hallo,

ich habe Messwerte mit Hysteresekurven und möchte diese mit pgfplots darstellen.

Da nun auf einen x-Wert 2-y-Werte kommen stellt es mir pgfplot auch als Hysterese dar.
Mein Problem ist nun, das ich gerne eine Darstellung hätte wo jedem x-Wert auch nur ein y-Wert zugeordnet wird. (also keine Hysterese)

Im meinen Minimalbeispiel sähe das so aus, das anstatt der Darstellung der Hysterese, meine x-Achse folgendermaßen verläuft: 2 - 1 - 0 - 1 - 2 .

Die Frage ist nun, kann man dies mit pgfplot so darstellen?
Ich hab es auch schon mit xtick=data probiert, aber das hilft auch nicht.

Vielen Dank im Voraus!

MfG

Minimalbeispiel:
\documentclass[12pt,a4paper,twoside=false]{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}

\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}

\usepackage{graphicx}

\usepackage[ngerman]{babel}


%pgfplots------------------------------------------------------------------------------------------------

\usepackage{pgfplots}
\pgfplotsset{compat=1.9,			
/pgf/number format/1000 sep={},		
/pgf/number format/use comma,						}
\usepgfplotslibrary{units}							
%-------------------------------------------------------------------------------------------------------

\begin{document}
%
\begin{center}
%
\begin{tikzpicture}
%
\begin{axis}[
grid=major,
width=0.85\textwidth,
xlabel={x-Achse},
ylabel ={y-Achse},
%xtick=data,
			]
%
\addplot coordinates{
(2,5)
(1,3)
(0,1)
(1,2.5)
(2,4.5)};
\addlegendentry{Legende 1}
%
\end{axis}
%
\end{tikzpicture}
%
\end{center}
%
\end{document}
Debian 7 (Wheezy) mit Texlive 2013 und Texmaker

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

Beitrag von esdd »

Falls du deine Werte auch als Tabelle laden kannst und die Abstände zwischen den x-Werten gleich sind, dann ginge folgendes:
\documentclass[12pt]{scrreprt} 
\usepackage{pgfplots}
\pgfplotsset{compat=1.9,
 /pgf/number format/1000 sep={},
 /pgf/number format/use comma} 

\usepackage{filecontents}
\begin{filecontents}{daten.dat}
2  5 
1  3
0  1 
1  2.5
2  4.5
\end{filecontents}

\begin{document} 
\begin{center} 
  \begin{tikzpicture} 
    \begin{axis}[ 
       grid=major, 
       width=0.85\textwidth, 
       xlabel={x-Achse}, 
       ylabel ={y-Achse}, 
       xtick=data,
       xticklabels from table={daten.dat}{[index]0}
    ] 
      \addplot table[x expr=\coordindex,y index=1]{daten.dat}; 
      \addlegendentry{Legende 1} 
    \end{axis} 
  \end{tikzpicture} 
\end{center} 
\end{document} 
Gruß
Elke

prankenandi
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 60
Registriert: Di 8. Apr 2014, 13:59

Beitrag von prankenandi »

Hallo Elke,

vielen Dank für deine Antwort.

Im großen und ganzen funktioniert dein Ansatz sehr gut.
Leider hab ich noch ein paar kleinere Probleme und Fragen.

Die Datenfiles die ich bekomme sind "semicolon"-getrennte Messwerte (.csv + Header). Benutze ich nun "col sep = semicolon" als \addplot-option, dann wird die gesamte Datenreihe, mit semicolons getrennt, hintereinander unter die x-Achse geschrieben (siehe neues Minimalbeispiel). Lasse ich aber "col sep = semicolon" weg, dann werden keine Spalten gefunden.
Das war das Hauptproblem.

Nun noch eine kleinere Fragen:

"xticklabels from table={daten.dat}{[index]0}" für die x-tickslabels funktioniert bei mir nicht, wenn ich für [index]0 einen definierten Spaltennamen angebe. Aber eigentlich müsste es das doch, laut manual, oder täusche ich mich?

Vielen Dank im Voraus!

MfG


\documentclass[12pt]{scrreprt}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9,
 /pgf/number format/1000 sep={},
 /pgf/number format/use comma}

\usepackage{filecontents}
\begin{filecontents}{daten.dat}
50;0.7
50;0.75
30;0.8
20;0.85
10;0.9
0;1.00
10;0.92
20;0.87
30;0.83
40;0.77
50;0.72
\end{filecontents}

\begin{document}
\begin{center}
  \begin{tikzpicture}
    \begin{axis}[
       grid=major,
       width=0.85\textwidth,
       xlabel={x-Achse},
       ylabel ={y-Achse},
       xtick=data,
       xticklabels from table={daten.dat}{[index]0}
    ]
      \addplot table[x expr=\coordindex, y index=1, col sep=semicolon]{daten.dat};
      \addlegendentry{Legende 1}
    \end{axis}
  \end{tikzpicture}
\end{center}
\end{document} 
Debian 7 (Wheezy) mit Texlive 2013 und Texmaker

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

Beitrag von esdd »

Ja, woher sollen die xticklabels auch wissen, dass beim Semikolon Schluß ist ;-)

Da ja alle Tabellen so sind, kann man die Information schon im \pgfplotsset am Anfang weitergeben. Dann funktioniert das auch mit der Spaltenbezeichnung.
\documentclass[12pt]{scrreprt} 
\usepackage{pgfplots} 
\pgfplotsset{compat=1.9, 
  /pgf/number format/1000 sep={}, 
  /pgf/number format/use comma,
  table/col sep=semicolon % Semikolon als Spaltentrenner
  } 

\usepackage{filecontents} 
\begin{filecontents}{daten.dat}
 xA;yA
 50;0.7 
 50;0.75 
 30;0.8 
 20;0.85 
 10;0.9 
 0;1.00 
 10;0.92 
 20;0.87 
 30;0.83 
 40;0.77 
 50;0.72 
\end{filecontents} 

\begin{document} 
\begin{center} 
   \begin{tikzpicture} 
     \begin{axis}[ 
        grid=major, 
        width=0.85\textwidth, 
        xlabel={x-Achse}, 
        ylabel ={y-Achse}, 
        xtick=data, 
        xticklabels from table={daten.dat}{xA} 
     ] 
       \addplot table[x expr=\coordindex, y=yA]{daten.dat}; 
       \addlegendentry{Legende 1} 
     \end{axis} 
   \end{tikzpicture} 
\end{center} 
\end{document} 
Gruß
Elke

Antworten