PGFPlots Paket - Fragen und Antworten

Fragen von TeXwelt.de zum Thema

Klicke auf den Titel, um die Antworten zu lesen - oder sieh alle PGFPlots-Fragen

04/13/2018 12:41 PM
Pgfplots Globale Achsenbeschriftung, Titel, Legende für zwei Diagramme erstellen

  1. Frage: Wie erstelle ich einen Titel für beide Diagramme?
  2. Frage: Wie erstelle ich eine Beschriftung der Achsen für beide Diagramme, ohne dass diese sich verschieben?
  3. Frage: Wie kann ich die Einträge in der Legende untereinander und die ganze Legende mittig unter den Diagrammen ausrichten?
Öffne in Overleaf
\documentclass[chapterprefix=true, 12pt, a4paper, oneside, parskip=half, listof=totoc, bibliography=totoc, numbers=noendperiod]{scrbook}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{figure}[ht]

    \begin{tikzpicture}
      \begin{semilogxaxis}[width=8cm,height=8cm,ylabel shift = -1cm,
        title={Grathöhe $h_{0}$},
        xlabel={Zustellung $a_{e}$ in mm},
        ylabel={Grathöhe in $\mu$m},
        xmin=0, xmax=1.0,
        ymin=0, ymax=1000,
        xtick={0,0.02,0.05,0.1,0.2,0.5,1.0},
        ytick={0,250,500,750,1000},
        log ticks with fixed point,
        %legend style={at={(0.5,-0.1)},anchor=north},
        legend columns=-2,
        legend entries={Graph1, Graph2},
        legend to name=named,
        ymajorgrids=false,
        xmajorgrids=false,
        grid style=dashed,
        /pgf/number format/.cd,
        use comma,
        1000 sep={},
        ]

        \addplot [color=red, thick, mark=o]  coordinates {
        (0.02,68)
        (0.05,416)
        (0.2,441)
        (0.5,309)
        (1.0,351)
        };

        \addplot [color=blue, thick, mark=square] coordinates {  
        (0.02,119)
        (0.05,389)
        (0.1,408)
        (0.2,359)
        (0.5,268)
        (1.0,283)
        };

      \end{semilogxaxis}
    \end{tikzpicture}
    \begin{tikzpicture}
      \begin{semilogxaxis}[width=8cm,height=8cm,ylabel shift = -1cm,
        %title={Grathöhe $h_{0}$},
        xlabel={Zustellung $a_{e}$ in mm},
        %ylabel={Grathöhe in $\mu$m},
        xmin=0, xmax=1.0,
        ymin=0, ymax=1000,
        xtick={0,0.02,0.05,0.1,0.2,0.5,1.0},
        ytick={0,250,500,750,1000},
        log ticks with fixed point,
        legend style={at={(0.5,-0.1)},anchor=north},
        ymajorgrids=false,
        xmajorgrids=false,
        grid style=dashed,
        /pgf/number format/.cd,
        use comma,
        1000 sep={},
        ]

        \addplot [color=blue, thick, mark=square] coordinates {  
        (0.02,389)
        (0.05,672)
        (0.2,829)
        (0.5,360)
        (1.0,776)
        };

         \addplot [color=red, thick, mark=o]  coordinates {
        (0.02,252)
        (0.05,239)
        (0.1,322)
        (0.2,519)
        (0.5,433)
        (1.0,479)
        };

      \end{semilogxaxis}
      \end{tikzpicture}
      \ref{named}

   \end{figure}

     \end{document}

alt text


04/12/2018 12:59 PM
pgfplots Skalierung der x-Achse anpassen

alt textIch bin dabei für meine Masterthese ein Diagramm mit 4 Graphen zu erstellen. Die Skalierung der X-Achse erfolgt dabei in 0,02 0,05 0,1 0,2 0,5 und 1,0 Schritten. Der Abstand bzw. die Skalierung zwischen den Werten soll aber gleich sein.

Öffne in Overleaf
\documentclass[chapterprefix=true, 12pt, a4paper, oneside, parskip=half, listof=totoc, bibliography=totoc, numbers=noendperiod]{scrbook}
\usepackage{pgfplots}
\usepackage{tikz}
\begin{document}
\begin{figure}[H]
\begin{tikzpicture}
\begin{axis}[width=0.95\textwidth,height=0.48\textheight,ylabel shift = -1cm,
    /pgf/number format/.cd,
        use comma,
        1000 sep={},
    title={Grathöhe $h_{0}$},
    xlabel={Zustellung $a_{e}$ in mm,}
    ylabel={Grathöhe in $\mu$m, }
    xmin=0, xmax=1.0,
    ymin=0, ymax=1000,
    xtick={0,0.02,0.05,0.1,0.2,0.5,1.0},
    ytick={0,250,500,750,1000},
    legend style={at={(0.5,-0.1)},anchor=north},
    ymajorgrids=false,
    xmajorgrids=false,
    grid style=dashed
    ]

\addplot [color=red, thick, mark=o]    table[x=L, y=H60,] {RaRz.csv};
\addplot [color=blue, thick, mark=square]   table[x=L, y=K60,] {RaRz.csv};
\addplot [color=black, thick, mark=o]  table[x=L, y=H90,] {RaRz.csv};
\addplot [color=orange, thick, mark=square] table[x=L, y=K90,] {RaRz.csv};
\legend{H`enter code here`; $\gamma$ = 60 $^\circ$,K; $\gamma$ = 60 $^\circ$,H; $\gamma$ = 90 $^\circ$,K; $\gamma$ = 90 $^\circ$};
\end{axis}
\end{tikzpicture}
\caption{Unterschrift}
\label{img:dia1}
\end{figure}  
\end{document}

Koordinaten:

Öffne in Overleaf
L   H60 K60 H90 K90
0   251 388.547 119.126 68.89
0.01    238.7   672.49  389.371 416.768
0.02    321.729     408.473 
0.1 518.886 829.402 359.083 441.275
0.2 432.966 359.907 268.583 309.692
1.0 479.48  776.298 283.119 351.612


03/29/2018 11:54 AM
Log. Colorbar passt nicht mit der Farbe des Punktes überein

Begrüße,

Die Farbe des Punktes folgender Zeile

Öffne in Overleaf
0.63  3745 1000000

wird falsch dargestellt. (Roter Punkt) Warum?

Öffne in Overleaf
\documentclass{article}
\usepackage{tikz,pgfplots} %Für die Darstellung
\begin{document}
\pgfmathdeclarefunction{lg10}{1}{ \pgfmathparse{ln(#1)/ln(10)}}
\begin{tikzpicture}
\begin{axis}[enlargelimits=0.2,set layers=standard, 
mark layer=axis background,colorbar sampled,only marks,view={0}{90}, colorbar style={yticklabel=\pgfmathparse{10^\tick}\pgfmathprintnumber\pgfmathresult,samples=20}] %Drehung
\addplot[
scatter,mark=square*,only marks,
point meta=\thisrow{myvalue}
]table {
x y  myvalue
0.2  100 1
0.35  2000 100
0.35  2000 100
0.63  3745 1000000
0.353  74 10
0.654  775 1
};
\end{axis}
\end{tikzpicture}
\end{document}


02/15/2018 03:30 PM
pgfplots: Schalter für pi/n-Unterteilungen erstellen

alt text

Sehe ich das richtig, dass sich den minor ticks keine Labels zuordnen lassen, im Unterschied zu den standardmäßigen xticklabels bzw. den extra x tick labels?

Meine Idee ist es, im Beispiel, pi/4- bzw. pi/2-Unterteilungen zu bzw. abschalten zu können. Wie könnte ich das machen?

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}[]
\begin{axis}[
font=\footnotesize,      
%x = 0.785 cm, 
enlarge y limits={0.5,upper}, % kein Effekt
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,%ylabel style={anchor=east},
      ylabel style={at=(current axis.above origin), anchor=base east},%<-
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick= {3.14, 6.28},           
xticklabels={$\pi$, $2\pi$},
%
minor xtick = {1.57,4.71},
%minor xtick labels={$\frac{\pi}2$, $\frac{3\pi}2$}, % geht nicht
%
extra x ticks={0.79,2.35,3.92,5.50},
extra x tick labels={$\frac\pi4$, $\frac{3\pi}4$, $\frac{5\pi}4$, $\frac{7\pi}4$},
%extra tick length={...}, % geht nicht
typeset ticklabels with strut,% ausrichten der ticklabels
enlarge y limits={0.125},
]
\addplot[domain=0:7, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}


02/15/2018 03:20 PM
pgfplots: fill between in polaraxis-Umgebung

alt text

Das folgende Beispiel füllt nur einen Teil des Kreissektors. Was muss ich anders machen, um den ganzen Kreissektor zu füllen.

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\usepgfplotslibrary{fillbetween}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{polaraxis}[]
\addplot[name path=A, draw=blue] coordinates { (0,0) (30,1)};
\addplot[name path=B, draw=blue] coordinates { (0,0) (90,1)};
\addplot[name path=C, draw=blue, domain=30:90, fill=pink]{1};
%
\addplot fill between[of= A and B]; % kein Effekt
\end{polaraxis}
\end{tikzpicture}

\end{document}


02/14/2018 05:00 PM
pgfplots: Fallunterscheidung mit Listenwert

Verwandt mit: pgfplots-fehler-bei-listen-verwendung


alt text

Ich habe hier einen Plot. Ich möchte, dass statt '1pi' bzw. '-1pi', wie üblich, 'pi' bzw. '-pi' angezeigt wird.

Dazu habe ich das Beispiel zur Fallunterscheidung mit ifdim aus dem pgfplots-Handbuch (S.319) rausgesucht.

Öffne in Overleaf
xtick/.expanded = {\xticklist},           
xticklabel={%
\ifdim\tick pt =3.14159 pt $\pi$%
\else%
   \ifdim\tick pt =-3.14159 pt $-\pi$%
   \else%
   \pgfmathparse{\tick / pi}%
   $\pgfmathprintnumber[precision=0]{\pgfmathresult}\pi$%
   \fi
\fi},

Nun habe ich aber das Problem, dass ich den zuvor erzeugten Listenwert '3.14159' reinschreiben, also kennen muss. Wenn ich einfach pi an diese Stelle schreibe funktioniert es nicht.

Was kann ich da machen?

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

% Reichweite der Ticks festlegen
\def\Range{-6,...,6}
% ticklist erstellen
\newcommand{\xticklist}{}% Name reservieren
\let\xticklist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}%
  \ifx\empty\xticklist{} \protected@xdef\xticklist{\pgfmathresult}%
  \else \protected@xdef\xticklist{\xticklist,\pgfmathresult}%
  \fi
}
\makeatother
Anzeigen: \xticklist

\begin{tikzpicture}[]
\begin{axis}[enlarge y limits={0.5,upper}, % kein Effekt
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,ylabel style={anchor=east},
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick/.expanded = {\xticklist},           
xticklabel={%
\ifdim\tick pt =3.14159 pt $\pi$%
\else%
   \ifdim\tick pt =-3.14159 pt $-\pi$%
   \else%
   \pgfmathparse{\tick / pi}%
   $\pgfmathprintnumber[precision=0]{\pgfmathresult}\pi$%
   \fi
\fi},
]
\addplot[domain=-10:10, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}


02/14/2018 01:58 AM
Wie erstelle ich Listen zur Achsenbeschriftung für pgfplots / tikz?

alt text

Etwa bei trigonometrischen Funktionen möchte man meist pi-Faktoren an der x-Achse auftragen. Klassiche Möglichkeit wäre die Angabe der ticks und ihrer Labels.

xtick={-6.28, -4.71, -3.14, -1.57, 1.57, 3.14, 4.71, 6.28 }, xticklabels={$-2\pi$, $-\frac{3\pi}{2}$, $-\pi$, $-\frac{\pi}{2}$, $\frac{\pi}{2}$, $\pi$, $\frac{3\pi}{2}$, $2\pi$ },

Ich hab mich gefragt, ob man solche oder ähnliche Inhalte nicht automatisch durch durch Schleifen erstellen kann.

Ich wollte die Frage ursprünglich zur Selbstbeantwortung einreichen, da ich glaubte hier eine Methode zur Listenerstellung gefunden zu haben. Diese Methode mag für einfache Beispiel wie hier sogar noch gehen; davon abgesehen ist die Verwendung von xdef aufwendig und anfällig, was Inhalte betrifft (siehe im Link).

Kann man solche Listen nicht eleganter, d.h. automatisiert/berechnend, erstellen, idealerweise mit der Bibliothek tikzmath oder sowas?

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}[]
\begin{axis}[enlarge y limits={0.5,upper}, % kein Effekt
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,ylabel style={anchor=east},
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick={-6.28, -4.71, -3.14, -1.57,
        1.57, 3.14, 4.71, 6.28
},
xticklabels={$-2\pi$, $-\frac{3\pi}{2}$, $-\pi$, $-\frac{\pi}{2}$,
                 $\frac{\pi}{2}$, $\pi$, $\frac{3\pi}{2}$, $2\pi$
},
]
\addplot[domain=-3.2:7, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}

PS: Mir geht es hierbei durchaus um eine allgemeine Methode, was die Anotationen in den Labels zu den entsprechenden Ticks angeht (nicht notwendigerweise nur die pi-Vielfachen). Hier ein Beispiel, was \underbrace verwendet:

alt text


02/13/2018 08:00 PM
pgfplots: Fehler bei Listen-Verwendung (Illegal parameter number in definition)

Anschlussfrage zu: tikz-foreach-fehler-bei-listenerstellung-illegal-parameter-number-in-definition


alt text

Ich habe wie im Verlinkten Thread Listen mit x-Werten erstellt und möchte diese in einem pgfplot platzieren; das tut soweit. Aber die Platzierung der Labels scheitert:

xtick/.expanded = {\xticklist}, % tut %xticklabels/.expanded = {\xticklabelslist}, % tut nicht

Es scheint, wie im verlinkten Thread, an dem underbrace zu liegen, wenngleich dieses protected ist. Kann/muss man das irgendwie noch mehr protecten?

BTW: Ich wollte hier noch das Zahlenformat einstellen, das geht normalerweise mit '\pgfmathprintnumber[fixed zerofill,precision=2]' vor '\pgfmathresult'. Das tut hier schonmal gar nicht bzw. führt zu seltsamen Darstellungen.

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usetikzlibrary{math}

\begin{document}

% Reichweite der Ticks festlegen
\def\Range{0,...,6}

% ticklist erstellen
\newcommand{\xticklist}{}% Name reservieren
\let\xticklist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}%
  \ifx\empty\xticklist{} \protected@xdef\xticklist{\pgfmathresult}%
  \else \protected@xdef\xticklist{\xticklist,\pgfmathresult}%
  \fi
}
\makeatother
Tut: \xticklist

% ticklabelist erstellen
\newcommand\Ausgabe{
  \ifnum\n=0 {$\protect\underbrace{\pgfmathresult}_{\n\pi}$}%
  \else 
     \ifnum\n=1 {$\protect\underbrace{\pgfmathresult}_{\approx \pi}$}
     \else {$\protect\underbrace{\pgfmathresult}_{\approx \n\pi}$}
     \fi
  \fi
}

\newcommand{\xticklabelslist}{}% Name reservieren
\let\xticklabelslist=\empty% Liste erstellen
\makeatletter
\foreach \n  in \Range
{
\pgfmathparse{\n*pi}% 
  \ifx\empty\xticklabelslist{} \protected@xdef\xticklabelslist{\Ausgabe}%
  \else \protected@xdef\xticklabelslist{\xticklabelslist,\Ausgabe}%
  \fi
}
\makeatother
Tut auch: \xticklabelslist

Tut hierin aber nur teilweise: \\
\begin{tikzpicture}[]
\begin{axis}[
axis lines=middle, 
xlabel=$x$,xlabel style={anchor=north},
ylabel=$y$,ylabel style={anchor=east},
x axis line style = {-latex}, y axis line style = {-latex},
%
xtick/.expanded = {\xticklist},                        % tut 
%
%xticklabels/.expanded = {\xticklabelslist},    % tut nicht
%
]
\addplot[domain=0:20, samples=300] {sin(deg(x))}; 
\end{axis}
\end{tikzpicture}

\end{document}


02/09/2018 06:44 PM
pgfplots: Problem mit Schleife, Definiton für zweite y-Achse

Ich habe hier eine Tabelle

Öffne in Overleaf
x  y1    y2    Info
1  4     9      A
2  5     8      B
3  3     7      C

und möchte einen Graphen zeichnen, bei dem links und rechts die Achsen y1 und y2 auftauchen, d.h. alt text

Dazu lese ich mittels \pgfplotstablegetelem{<row>}{<column>}\of{<table>}\pgfplotsretval aus der Tabelle und möchte mit einer Schleife die Werte als nodes platzieren.

Öffne in Overleaf
% Zweite y-Achse
% Maximalen x-Wert für node-Platzierung auslesen
\def\xMax{\pgfkeysvalueof{/pgfplots/xmax}}
% 
\pgfplotsinvokeforeach{0,1,...,2}{%%
% Koordinaten lesen
\ZelleLesen{#1}{y1}
\def\yKoordinate{\pgfplotsretval} % <----   Problem hier!!!
% Koordinaten setzen
\node[red, anchor=west, xshift=0.125pt] at (axis cs: \xMax,\yKoordinate) {\Zelle{#1}{y2}};
}%%

Dabei geht aber etwas schief: Alle Werte werden an die selbe Stelle gesetzt. Scheints ändert sich die \def\yKoordinate nicht.

alt text

Was muss ich da anders machen?


PS: Ein ähnliches Problem gab es schonmal hier Wie kann ich in pgfplots den Parameter an eine Parameterfunktion-Kurvenschar schreiben? aber die Lösung dort funktioniert gleich mal wieder nicht.


Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm, varwidth]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{compat=1.13}

\begin{filecontents}{datatable.dat}
x  y1    y2    Info
1  4     9      A
2  5     8      B
3  3     7      C
\end{filecontents}

\begin{document}
% Tabellen-Element auslesen
%\pgfplotstablegetelem{<row>}{<column>}\of{<table>}\pgfplotsretval
\newcommand\ZelleLesen[2]{\pgfplotstablegetelem{#1}{#2}\of{datatable.dat}}
\newcommand\Zelle[2]{\ZelleLesen{#1}{#2}\pgfplotsretval}
Test: \Zelle{0}{y2} \\

\begin{tikzpicture}
\begin{axis}[
clip=false,
%y = 1cm, 
visualization depends on={value \thisrowno{3}  \as \Name},
nodes near coords={\Name}, 
xtick = data, 
ytick=data, 
]
\addplot [only marks, mark=*] table[] {datatable.dat}; 
%
% Zweite y-Achse
% Maximalen x-Wert für node-Platzierung auslesen
\def\xMax{\pgfkeysvalueof{/pgfplots/xmax}}
% 
\pgfplotstablegetrowsof{datatable.dat}
\pgfmathsetmacro{\Zeilenzahl}{\pgfplotsretval-1}    
\pgfplotsinvokeforeach{0,...,\Zeilenzahl}{%%
% Koordinaten lesen
\ZelleLesen{#1}{y1}
\def\yKoordinate{\pgfplotsretval} % <----   Problem hier!!!
% Koordinaten setzen
\node[red, anchor=west, xshift=0.125pt] at (axis cs: \xMax,\yKoordinate) {\Zelle{#1}{y2}};
}%%
\end{axis}
\end{tikzpicture}

\end{document}


02/07/2018 01:13 PM
pgfplots: Annotationen an y-Achse aus Tabelle

Öffne in Overleaf

1  2018    128 110
3  2017    110 94
2  2017    144 128

1  2017     205  208
3  2016     161 146
2  2016     172 167

Ich habe hier den Plot einer komplizierten Tabelle, bei der die verschiedenfarbigen Balken zu gleichen Monaten, aber zu verschiedenen Jahren gehören.

Die Legende beschreibt dies zwar, es ist aber auf den ersten Blick ggf. etwas verwirrend.

Wie könnte ich an die y-Achse noch die konkreten Monatsnamen (oder auch die Monatszahl, egal..) mit Jahreszahl schreiben, z.B. so wie im 2. Bild?

Möglichst zusäzlich zur normalen Achsennummerierung 1,2,...,12.

Die zugehörigen Jahreszahlen stehen auch in der Tabelle.

alt text

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=5mm]{standalone}

\usepackage{pgfplots, amsmath}
\pgfplotsset{compat=1.13, %north west
common/.style={postaction={pattern=north east lines}},
2017AD/.style={common, pattern color=red!70, fill=red!40, draw=red},
2018AD/.style={common, pattern color=  blue!70, fill=blue!40, draw=blue},
}%
    \usetikzlibrary{patterns}
\begin{document}

\begin{tikzpicture}[scale=0.75]
\begin{axis}[
xbar,
enlarge x limits=0.35,
%
font=\footnotesize\sffamily, 
%
ytick = data, 
y = 1cm, 
ymin=0.4, ymax=3.6, 
%
%point meta=x, 
nodes near coords={\Mitglieder \ [\Fragen]},
every node near coord/.append style={xshift=0pt,font=\footnotesize},%anchor=east,
visualization depends on={value \thisrowno{2}  \as \Mitglieder},
visualization depends on={value \thisrowno{3}  \as \Fragen},
%
xlabel={Neue Mitglieder},
ylabel={Kalendermonat},
legend entries={02.2017-01.2018 ,02.2016-01.2017},
legend columns=2,
legend style={anchor=south,legend pos= north west,yshift=1cm, draw=none
}
]
\addplot [2017AD] 
table[x index=2, y index=0] {
1   2018    128 110
3  2017 110 94
2  2017 144 128
}; 
\addplot [2018AD] 
table[x index=2, y index=0] {
1   2017           205  208
3  2016     161 146
2  2016     172 167
}; 
\end{axis} 
\end{tikzpicture}
\end{document}


02/06/2018 10:42 PM
Funktion mit pgfplot plotten

Hi, ich bin relativ neu in Latex. Für die meisten meiner Probleme habe ich auch eine Lösung im Internet gefunden. Bei der finde ich leider nichts. Und zwar möchte ich eine relativ einfache Funktion plotten. Dazu habe ich ein paar Fragen. Kleines Update. Ein paar Fragen konnte ich doch beantworten, alle jedoch immer noch nicht.

  1. Wie schaffe ich es, dass er den Graph länger zeichnet, als bis x=5?
  2. Wie vergrößere ich die komplette Grafik?

Hier ist mein bisheriger Code:

Öffne in Overleaf
\begin{center}

\begin{figure}
\centering
    \begin{tikzpicture}
         \begin{axis}[
                 grid = major,
                 xlabel=Geschwindigkeit,
                 x unit=\si{\knot},
                 xmin=0, xmax=22,
                 ylabel=Leistung, 
                 y unit=\si{\kilo\watt},
                 ymin=0, ymax=300
                ]

         \addplot [color = orange, mark = none]{(x/21)^3*11000};
         \legend{Einwellenbetrieb}
         \end{axis}
\end{tikzpicture};
\caption{23}
\end{figure}
\end{center

}

An sich sind das relativ einfache Fragen, aber ich habe leider nichts gefunden. Ich hoffe jemand kann mir weiterhelfen. Danke im voraus.

Grüße Roy


02/06/2018 08:58 PM
Achsenskalierung bei TikZ

In dieser Woche erstelle ich wieder einige Diagramme mit TikZ. Die y-Achse eines Diagramms soll linear sein, aber die x-Achse soll mit einer Zahlenfolge, z. B. an = 100 * 2n-1, beschriftet werden.

Was muss ich denn mit TikZ der x-Achse sagen, dass sie an jedem "Tick" immer den doppelten Wert des vorhergehenden "Ticks" setzen soll. Kann man das der x-Achse mit einer expiziten Zahlenfolge beibringen?

Irgendwo habe ich gelesen, dass die Koordinaten der Kurve die "Ticks" der Achsen bestimmen.

Ein Diagramm mit MS Excel kann man ziemlich schnell erstellen.
Hier die Grafik aus MS Excel:

alt text


02/02/2018 07:49 PM
pgfplots Punkte benennen bei \addplot coordinates

text mark as node=true erlaubt, laut Handbuch (S.180), powervolle Optionen für marks. Wie kann ich die marks zusätzlich benennen, z.B. mit A und B?

alt text

Öffne in Overleaf
\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[]
\addplot+[mark=none]{x^2)};
\addplot[only marks,mark=*,mark options={scale=2, fill=red},text mark as node=true] coordinates { (0,0)   (2,4)};
\end{axis}
\end{tikzpicture}
\end{document}


01/21/2018 08:18 PM
pgfplots: Nur gerade (ungerade) Zahlen auf Achse anzeigen

Wie kann ich bei einem plot table bewirken, dass auf einer Achse nur gerade Zahlen angezeigt werden. Ansonsten möglichst x=data, y=data beibehalten, so dass keine anderen Zahlen (hier etwa die 0) reinkommen.

Ich weiß, man könnte sowas wie xticks={0,2,...<xMax> } machen, aber xMax ist auch nicht immer bekannt; und das ist auch eine Schummellösung.

Das muss doch exakt gehen. :) Ich habe hier mal einen Beitrag gesehen, wo sowas Ähnliches am Rande mit einer Modulo-Rechnung gemacht wurde (ich finde ihn aber nimmer).

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\pgfplotstableread{
1   2  
2   3   
3   2   
4   5
5   1  
}\datatable
\begin{document}

\begin{tikzpicture}
\begin{axis}[ymin=0,
xtick=data, %ytick=data,   % nur xy-Werte aus Tabelle anzeigen
]
\addplot table [header=false, col sep=space,] {\datatable}; 
\end{axis}
\end{tikzpicture}

\end{document}


01/20/2018 09:19 PM
pgfplots: 'nodes near coords' genau mittig platzieren bei 'matrix plot'

Was muss ich einstellen, damit die nodes near coords genau mittig platziert werden, also anstelle des "dicken Punktes" (mark=o)?

Ich hab mir z.Zt. mit every node near coord/.append style={xshift=0pt,yshift=-7pt, font=\footnotesize}, beholfen, geht das eventuell exakt?

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}%

\begin{document}

\begin{tikzpicture}
\begin{axis}[ 
enlargelimits=false,
%
nodes near coords={abc},
% Hilfslösung
%every node near coord/.append style={xshift=0pt,yshift=-7pt,  font=\footnotesize}, 
]

\addplot[
matrix plot,
mark=o,
mesh/cols=3,
point meta=explicit]
table[meta=C] {
x y C
0 0 0
1 0 1
2 0 2
0 1 3
1 1 4
2 1 5
0 2 6
1 2 7
2 2 8
};
\end{axis}
\end{tikzpicture}

\end{document}


01/20/2018 08:21 PM
pgfplots: Problem mit Inline-Tabelle

Mir ist aufgefallen, sobald ich visualization depends on={\thisrowno{0} \as \aaa} verwende, keine Tabelle der Machart

Öffne in Overleaf
\pgfplotstableread{
1 6   
1 4   
3 3    
}\Mydatatable

mehr verwenden kann.

Möglicherweise eine logische Fehlermeldung, aber wie kann ich das beheben? Wäre schon gut, wenn ich Tabellen dieses Typs verwenden könnte. (Hinweis: bei externen Tabellen geht es wieder, das istalso nicht das Problem.)

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\begin{document}
\pgfplotstableread{
1 6   
1 4   
3 3    
}\Mydatatable

\begin{tikzpicture}

\begin{axis}[enlargelimits=0.2, font=\tiny]
 Geht ---------------------------------
\addplot[mark=*, only marks,  
nodes near coords={abc},
visualization depends on={\thisrowno{0}  \as \aaa},
visualization depends on={\thisrowno{1}  \as \bbb},
]
table[header=false]{%
1 5   
1 3   
3 2 
};

% Geht nicht! ---------------------------------
%\addplot[
%mark=*, only marks,  
%nodes near coords={123},
%visualization depends on={\thisrowno{0}  \as \aaa},
%visualization depends on={\thisrowno{1}  \as \bbb},
%]
%table[header=false]{\Mydatatable};
\end{axis}

\end{tikzpicture}

\end{document}


01/20/2018 11:31 AM
Änderung des Koordinatensystems

dzaic hat mir bereits gezeigt, wie ich Regelkarten erstellen kann. Ich habe das jetzt noch eine Variable für die Anzahl angepasst.

Öffne in Overleaf
\documentclass[
    tikz,
   % borders = 5mm,
]{standalone}
\usepackage{filecontents}
\usepackage{pgfplots,amsmath}

\begin{filecontents}{data.csv}
Stichprobe,Merkmal
1,124
2,126
3,128.5
\end{filecontents}

% Grenzwerte
\newcommand\OEG{127}
\newcommand\UEG{123}
\newcommand\Mittelwert{125}
\newcommand\Anzahl{4}

\begin{document}   
\begin{tikzpicture}   
\begin{axis}[
      clip=false,
      title = \textbf{Regelkarte},
      xlabel = Stichprobe,
      ylabel = Merkmal,     
      ]

      % Grenzen
      \addplot[dashed,thick,red] coordinates { (0,\OEG) (\Anzahl,\OEG) };
      \addplot[dashed,thick,red] coordinates { (0,\UEG) (\Anzahl,\UEG) };
      \addplot[thick,green] coordinates { (0,\Mittelwert) (\Anzahl,\Mittelwert) };

        \node[right] at (axis cs:\Anzahl,\OEG) {OEG=\OEG};
        \node[right] at (axis cs:\Anzahl,\UEG) {UEG=\OEG};
        \node[right] at (axis cs:\Anzahl,\Mittelwert) {Mittelwert=\Mittelwert};

      % Messwerte
      \addplot table[x=Stichprobe, y=Merkmal, col sep=comma] {data.csv};
   \end{axis} 
   \end{tikzpicture} 
\end{document}

alt text

Wie bekomme ich es jetzt noch hin, dass 0 der Ursprung ist? Denn ist gibt ja keine Stichprobe 0. Zum anderen würde ich gerne diesen Rahmen entfernen und nur die X und Y-Achse sehen.


01/19/2018 10:11 AM
Wie erstelle ich eine Regelkarte?

Guten Morgen zusammen,

ich würde gerne eine Regelkarte mittels LaTeX erstellen. Sie soll so aussehen:

alt text

Die Grenzen OEG, UEG und den Mittelwert möchte ich manuell eingeben. Das Gitter (X/Y-Achse) soll sich an den Werten orientieren, die ich eingebe.

Folgendermaßen habe ich bereits angefangen:

Öffne in Overleaf
\documentclass[
    tikz,
    borders = 5mm,
]{standalone} 
\usepackage{pgfplots,amsmath} 
\begin{document}   
\begin{tikzpicture}   
\begin{axis}[
    %Beschriftung
      title = \textbf{Regelkarte},
      xlabel = Stichprobe,
      ylabel = Merkmal,     
    %Formatierung
      %minor tick num=2,
      %grid = both,
    %Grenzen
      ]
      % Grenzen
      \addplot[dashed,thick,red] coordinates { (0,3) (3,3) };
      \addplot[dashed,thick,red] coordinates { (0,1) (3,1) };
      % Nominalwert
      \addplot[thick,green] coordinates { (0,2) (3,2) };
      % Messwerte
   \end{axis} 
   \end{tikzpicture} 
\end{document}

alt text


01/18/2018 11:19 PM
pgfplots: 'matrix plot' Hintergrundfarben erzwingen

alt text

Ich habe hier einen matrix plot für eine Tabelle dort sind die Farben in der Spalte bgcolor willkürlich mit 1,2,... betitelt; woraus pgfplots ein Farbschema zu machen scheint.

Wie kann ich ihn zwingen, eigene Farben zu verwenden, etwa solche, die durch ein Schema des Typs

Öffne in Overleaf
scatter/classes={%
R={red!50},
B={blue!50},
S={lightgray}
},

festgelegt sind. In der Spalte bgcolor müssten dann entsprechend Buchstaben R, B und S stehen. Das bekomme ich nicht hin.

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
enlargelimits=false,
%x = 10mm, y =10mm,  
xtick=data, ytick=data,   % nur xy-Werte aus Tabelle anzeigen
scatter/classes={%
r={red},
b={blue},
s={black},
R={red!50},
B={blue!50},
S={lightgray}
},
]
\addplot[
matrix plot,
nodes near coords, %=\coordindex,
%mark=*,
mesh/cols=3,
point meta=explicit,
%
%visualization depends on={\thisrow{bgcolor} \as \bgcolor},
%point meta=explicit symbolic,
]
table[meta=bgcolor] {
x y bgcolor
1 1 1
2 1 2
3 1 3
1 2 4
2 2 5
3 2 6
};
\end{axis}
\end{tikzpicture}

\end{document}


01/18/2018 08:19 PM
Wie kann ich Werte über eine externe Datei z.B. csv in ein Diagramm als Linienzug überführen?

Hallo Zusammen,

ich möchte mir gerne ein Liniendiagramm erstellen. Dazu sollen die X/Y Werte für den Linienzug extern aus einer Datei wie zum Beispiel einer csv Datei importiert werden.

alt text

Könnt ihr mir dabei weiterhelfen?

Öffne in Overleaf
\documentclass[tikz]{standalone} \usepackage{pgfplots,amsmath} \begin{document}   \begin{tikzpicture}   \begin{axis}[
    %Beschriftung
      title=\textbf{Liniendiagramm},
      xlabel = Probennummer,
      ylabel = y in mm,     %Formatierung
      minor tick num=1,
      grid = both,
      ]
       \addplot table[x index=0,y index=1]{
            0.5  0.50
            0.64  0.53
            0.82  0.83
          };    \end{axis} \end{tikzpicture} \end{document}


01/18/2018 06:13 PM
pgfplots: 'plot table' Spaltennamen festlegen

Ich möchte bei einer Tabelle die Spaltenbenennung (x y p q) aussparen und selbst festlegen.

Ich dachte, das geht mit columns/2/.style = {column name=p}. Scheinbar ist es nicht ganz so einfach. Was muss ich da anders machen?

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
 \pgfplotsset{width=7cm,compat=1.13}

% Tabelle des Typs
% x  y  p  q 
\pgfplotstableread{
1   2   2   5
1   3   7   1
8   2   3   1
9   5   3   6
}\datatable

\begin{document}

\begin{tikzpicture}
\begin{axis}[ymin=0]
\addplot table [
%header=false, 
% columns 0 und 1 werden autom. als x- und y-Koordinaten gewertet
columns/2/.style = {column name=p},
columns/3/.style = {column name=q},
%
%x=p, y=q    % Wieso geht das nicht?
%x=\thisrow{p}, y=\thisrow{q}    % Wieso geht das nicht?
%
] {\datatable}; 
\end{axis}
\end{tikzpicture}

\end{document}


01/17/2018 10:36 PM
pgfplot: matrix plot Layout anpassen

pgfplots gibt sich sehr viel Mühe, ein Farbschema festzulegen. Ich möchte/muss das selbst machen.

Ich denke, es sind nur ein paar triviale Einstellungen, die hier fehlen.


Ich habe hier eine Beispielabelle (diese könnte auch mehr Zeilen haben)

Öffne in Overleaf
table[]  {
x y   Z N color bgcolor
1 1   1 4 r       R
1 2   2 3 s       S
2 1   3 2 b      B
2 2   4 1 b       R
};

und möchte daraus einen matrix plot machen.

  • Klappt soweit: Die Spalten Z und N sollen zum Zähler/Nenner eines Bruches werden.

  • Klappt noch nicht: Die Spalte color soll die Textfarbe festlegen, etwa nach dem Schema \tikzset{TextFarben/.style={r/.style={red}, b/.style={blue}, s/.style={black} }}

  • Klappt auch noch nicht: Die Spalte bgcolor soll die Hintegrundfarbe festlegen, etwa nach dem Schema \tikzset{HintergrundFarben/.style={R/.style={red!50}, B/.style={blue!50}, S/.style={black!50} }}

Also ich komme so weit:

alt text

(wobei die Brüche noch nicht 100% richtig gefärbt sind)

Was muss ich ändern, um einen richtigen matrix plot zu erhalten?

PS: Falls jmd. Einsparungsmöglichkeiten sieht immer gern. Z.B. dreimal *\pgfmathprintnumber[precision=0]*, zweimal *visualization depends on* (anders ging es nicht). Nur die Brüche sollte man pgfplots nicht selbst darstellen lassen, weil sonst Probleme/Fehler aufkommen (die Tabelle kann mitunter sehr große Zahlen enthalten). Die Zahlen in der Tabelle stammen aus Mathematica.

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
 \pgfplotsset{width=7cm,compat=1.13}
\begin{document}

% pgfplots.pdf, S. 115
\pgfplotsset{ZahlenAnzeigen/.style={
%TextFarben, 
nodes near coords*={ 
\pgfmathsetmacro{\Nenner}{int(\nenner)}
\ifnum\Nenner=1
    $\textcolor{red}{\pgfmathprintnumber[precision=0]\zaehler}$%
\else
    ${\frac{\pgfmathprintnumber[precision=0]\zaehler}
    {\pgfmathprintnumber[precision=0]\nenner}}$%
\fi},
every node near coord/.append style={xshift=0pt,yshift=-7pt,  font=\footnotesize}
}}

\tikzset{TextFarben/.style={
r/.style={red},  b/.style={blue}, s/.style={black}
}}

\tikzset{HintergrundFarben/.style={
R/.style={red!50},  B/.style={blue!50}, S/.style={black!50}
}}

\begin{tikzpicture}
\begin{axis}[enlargelimits=0.2]
\addplot[matrix plot,
%mark=*,
only marks,  % ohne das geht es nicht
%point meta=\thisrow{color},
ZahlenAnzeigen,
visualization depends on={\thisrow{Z}  \as \zaehler},
visualization depends on={\thisrow{N}  \as \nenner},
]
table[]  {
x y   Z N color bgcolor
1 1   1 4 b       B
1 2   2 3 s       S
2 1   3 2 b      B
2 2   4 1 r       R
};
\end{axis}
\end{tikzpicture}

\end{document}


01/15/2018 08:00 PM
pgfplots: Label-Platzierung bei 'matrix plot'

Gibt es vielleicht eine Möglichkeit, die Labels wie auf dem Bild zu platzieren?

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[enlargelimits=false,
xticklabel pos=right,   % x-Achse oben statt unten
xlabel = {k}, 
ylabel = {n}, 
% hide x axis, hide y axis,  % Achsen ausblenden
%x = 5mm, y =5mm,   % Maßstab
]
\addplot[
matrix plot,
%mark=*,%nodes near coords=\coordindex,
mesh/color input=explicit,
]
coordinates {
(1,1) [color=red]      (2,1) [color=blue]  (3,1) [color=yellow]

(1,2) [color=black] (2,2) [color=brown] (3,2) [color=magenta]

(1,3) [color=green] (2,3) [color=red]  (3,3) [color=white]
};
\node at (1,1) []{a/b};
\end{axis}
\end{tikzpicture}

\end{document}


01/15/2018 07:42 PM
pgfplots: Schriftart für Achsenbeschriftung wird nicht angenommen

Mir ist aufgefallen, dass ticklabel style={font=\ttfamily} keine Wirkung hat. Was mache ich falsch?

Ich wollte die Schriftart der Zahlen auf den Achsen ändern.

alt text

Öffne in Overleaf
%\documentclass[]{article}
\documentclass[border=3pt, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{width=7cm,compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[enlargelimits=false,
ticklabel style={font=\ttfamily}, % Schriftart wird nicht angenommen?
]
\addplot[
matrix plot,
mark=*,%nodes near coords=\coordindex,
mesh/color input=explicit,
]
coordinates {
(1,1) [color=red]      (2,1) [color=blue]  (3,1) [color=yellow]

(1,2) [color=black] (2,2) [color=brown] (3,2) [color=magenta]

(1,3) [color=green] (2,3) [color=red]  (3,3) [color=white]
};
\end{axis}
\end{tikzpicture}

\noindent Ist: 1 2 3 \\
Soll: \texttt{1 2 3 }

\end{document}


12/17/2017 06:19 PM
Hervorhebung/Bezeichnung/Label für bestimmte Ereignisse in einer pgfplots-Darstellung

Ich hab nachfolgende Statistik erzeugt. Ich würde nun gerne bestimmte Ereignisse hervorheben und unter/neben dem Bild als Erläuterung angeben. Ungefähr wie in:

dieses Bild

Gegebenenfalls auch direkt, ohne Legendeneintrag, in die Statistik reinpacken, aber bei längeren Beschriftungen wird das wohl nicht passen. pin scheint wohl solche Einträge zu ermöglichen, aber wie?

Öffne in Overleaf
\begin{filecontents*}{GDP.csv}
        Jahr,Total,Jung,Mittel,Alt
                1990-01-01,2.5,4.9,2.2,1.6
                1991-01-01,4.3,9.9,3.2,3.1
                1992-01-01,5.3,10.0,4.3,4.4
                1993-01-01,5.3,11.5,4.2,4.0
                1994-01-01,4.9,11.0,3.7,3.5
                1995-01-01,3.7,8.4,2.6,3.7
                1996-01-01,3.9,7.7,3.0,3.7
                1997-01-01,2.7,6.0,2.1,2.0
                1998-01-01,2.0,4.4,1.4,2.0
                1999-01-01,2.3,4.7,1.7,2.0
                2000-01-01,2.3,4.8,1.7,1.6
                2001-01-01,3.3,7.2,2.7,1.9
                2002-01-01,3.3,8.2,2.5,1.9
                2003-01-01,3.1,8.1,2.0,2.5
                2004-01-01,2.6,7.2,1.7,1.3
                2005-01-01,2.9,8.2,1.8,1.5
                2006-01-01,2.3,7.1,1.3,1.1
                2007-01-01,3.0,8.2,2.0,1.6
                2008-01-01,7.2,16.0,6.1,3.4
                2009-01-01,7.6,16.2,6.3,4.2
                2010-01-01,7.1,14.6,5.6,5.2
                2011-01-01,6.0,13.6,4.6,4.1
                2012-01-01,5.4,10.7,4.6,3.2
                2013-01-01,5.0,10.0,4.3,2.8
                2014-01-01,4.0,8.7,3.2,2.6
                2015-01-01,3.0,6.5,2.5,1.8
                2016-01-01,2.5,4.9,2.2,1.6        
        \end{filecontents*}
        \documentclass[tikz]{standalone}
        \usepackage{pgfplots}
        \usepgfplotslibrary{dateplot}
        \usepackage[main=ngerman,icelandic,danish,frenchb]{babel}
        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc} 
         \usepackage[oldstyle,sflining]{libertine}
        \begin{document}

        \sffamily
        \begin{tikzpicture}
         %   \sffamily
              \begin{axis}[
              date ZERO=1990-01-01,
                date coordinates in=x,
                no marks,
                width=12cm,
                height=6cm,
                enlargelimits=false,
                xticklabel={\tiny\year},
                   xticklabel style={rotate=45,anchor=north east},
              xtick={1990-01-01,1991-01-01,1992-01-01,1993-01-01,1994-01-01,1995-01-01,1996-01-01,1997-01-01,1998-01-01,1999-01-01,2000-01-01,2001-01-01,2002-01-01,2003-01-01,2004-01-01,2005-01-01,2006-01-01,2007-01-01,2008-01-01,2009-01-01,2010-01-01,2011-01-01,2012-01-01,2013-01-01,2014-01-01,2015-01-01,2016-01-01},
                xtick pos=left,
                xtick align=outside,
                cycle multi list={mark list\nextlist color list},
                ymin=-0,ymax=17,
                ytick={0,1,2,3,4,...,17},
                yticklabel={\tiny\pgfmathprintnumber[verbatim]{\tick}\%},
                ytick style={draw=none},
                yticklabel pos=right,
                ymajorgrids=true,
               legend style={
                        draw=none,
                        legend cell align=left,
                        at={(0,1.05)},% <-
                        anchor=south west,% <-
                        legend image code/.code={
                            \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
                        },
                      },
                      legend columns=-1% <-
                      ]   
        \addplot table[col sep=comma,x=Jahr,y={Total}] {GDP.csv};
            \addlegendentry{Total};
             \addplot table[col sep=comma,x=Jahr,y={Jung}] {GDP.csv};
                \addlegendentry{16--24};
                 \addplot table[col sep=comma,x=Jahr,y={Mittel}] {GDP.csv};
                    \addlegendentry{25--54};
                     \addplot table[col sep=comma,x=Jahr,y={Alt}] {GDP.csv};
                        \addlegendentry{55-74};
                                       \end{axis}
            \end{tikzpicture}
        \end{document}


12/15/2017 01:54 PM
Platzhalter für fehlende Zahl bei einer Statistik mit pgfplots

Ich werde nicht glücklich mit pgfplots, es hilft aber nix. Wäre super, wenn mir jmd. behilflich sein könnte. Hab mir aus einer alten Datei zur Inflationsrate versucht, einen neue Datei mit dem GDP zu erstellen. Leider fehlen in der *.csv bei ein paar Jahren die notwendigen Angaben. Ich weiß nun nicht, was ich als Platzhalter eintragen muss.

Package PGF Math Error: Could not parse input '...' as a floating point number, sorry. The unreadable part was near '..'.. See the PGF Math package documentation for explanation. `Type H <return> for immediate help.... l.66 ...,x=Jahr,y={Vereinigte Staaten}] {GDP.csv};

Beispiel:

Öffne in Overleaf
\begin{filecontents*}{GDP.csv}
    Jahr,Vereinigte Staaten,United Kingdom,Denmark,Finland,Iceland,Norway,Sweden,Germany,EU28
    1990-01-01,1.9,0.7,1.5,0.7,1.2,1.9,0.8,5.3,..
    1991-01-01,-0.1,-1.1,1.4,-5.9,-0.2,3.1,-1.1,5.1,..
    1992-01-01,3.6,0.4,2.0,-3.3,-3.4,3.6,-1.2,1.9,..
    1993-01-01,2.7,2.5,0.0,-0.7,1.3,2.8,-2.1,-1.0,..
    1994-01-01,4.0,3.9,5.3,3.9,3.6,5.1,4.1,2.5,..
    1995-01-01,2.7,2.5,3.0,4.2,0.1,4.2,4.0,1.7,..
    1996-01-01,3.8,2.5,2.9,3.7,4.8,5.0,1.5,0.8,1.9
    1997-01-01,4.5,4.0,3.3,6.3,5.5,5.3,2.9,1.8,2.9
    1998-01-01,4.4,3.1,2.2,5.4,7.0,2.6,4.2,2.0,3.0
    1999-01-01,4.7,3.2,2.9,4.4,3.9,2.0,4.5,2.0,3.0
    2000-01-01,4.1,3.7,3.7,5.6,4.6,3.2,4.7,3.0,3.8
    2001-01-01,1.0,2.5,0.8,2.6,3.9,2.1,1.6,1.7,2.2
    2002-01-01,1.8,2.5,0.5,1.7,0.6,1.4,2.1,0.0,1.4
    2003-01-01,2.8,3.3,0.4,2.0,2.4,0.9,2.4,-0.7,1.3
    2004-01-01,3.8,2.4,2.7,3.9,8.1,4.0,4.3,1.2,2.5
    2005-01-01,3.3,3.1,2.3,2.8,6.4,2.6,2.8,0.7,2.1
    2006-01-01,2.7,2.5,3.9,4.1,5.0,2.4,4.7,3.7,3.3
    2007-01-01,1.8,2.4,0.9,5.2,9.4,3.0,3.4,3.3,3.0
    2008-01-01,-0.3,-0.5,-0.5,0.7,1.7,0.5,-0.6,1.1,0.4
    2009-01-01,-2.8,-4.2,-4.9,-8.3,-6.5,-1.7,-5.2,-5.6,-4.3
    2010-01-01,2.5,1.7,1.9,3.0,-3.6,0.7,6.0,4.1,2.1
    2011-01-01,1.6,1.5,1.3,2.6,2.0,1.0,2.7,3.7,1.7
    2012-01-01,2.2,1.5,0.2,-1.4,1.3,2.7,-0.3,0.5,-0.4
    2013-01-01,1.7,2.1,0.9,-0.8,4.3,1.0,1.2,0.5,0.3
    2014-01-01,2.4,3.1,1.6,-0.6,2.1,2.0,2.6,1.9,1.8
    2015-01-01,2.6,2.3,1.6,0.0,4.3,2.0,4.5,1.7,2.3
    2016-01-01,...,1.8,2.0,1.9,7.4,1.1,3.2,1.9,1.9
    \end{filecontents*}
    \documentclass[tikz]{standalone}
    \usepackage{pgfplots}
    \usepgfplotslibrary{dateplot}
    \begin{document}
    \sffamily
    \begin{tikzpicture}
        \sffamily
          \begin{axis}[
          date ZERO=1990-01-01,
            date coordinates in=x,
            no marks,
            width=12cm,
            height=6cm,
            enlargelimits=false,
            xticklabel={\tiny\year},
          xtick={1990-01-01,1991-01-01,1992-01-01,1993-01-01,1994-01-01,1995-01-01,1996-01-01,1997-01-01,1998-01-01,1999-01-01,2000-01-01,2001-01-01,2002-01-01,2003-01-01,2004-01-01,2005-01-01,2006-01-01,2007-01-01,2008-01-01,2009-01-01,2010-01-01,2011-01-01,2012-01-01,2013-01-01,2014-01-01,2015-01-01,2016-01-01},
            xtick pos=left,
            xtick align=outside,
            ymin=0,ymax=30,
            ytick={0,4,...,30},
            yticklabel={\pgfmathprintnumber[verbatim]{\tick}\%},
            ytick style={draw=none},
            yticklabel pos=right,
            ymajorgrids=true,
           legend style={
                    draw=none,
                    legend cell align=left,
                    at={(0,1.05)},% <-
                    anchor=south west,% <-
                    legend image code/.code={
                        \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
                    },
                  },
                  legend columns=-1% <-
                  ]   
    \addplot table[col sep=comma,x=Jahr,y={Vereinigte Staaten}] {GDP.csv};
        \addlegendentry{Vereinigte Staaten};
         \addplot table[col sep=comma,x=Jahr,y={United Kingdom}] {GDP.csv};
            \addlegendentry{United Kingdom};
             \addplot table[col sep=comma,x=Jahr,y={Denmark}] {GDP.csv};
                \addlegendentry{Denmark};
                 \addplot table[col sep=comma,x=Jahr,y={Finland}] {GDP.csv};
                    \addlegendentry{Finland};
                     \addplot table[col sep=comma,x=Jahr,y={Iceland}] {GDP.csv};
                        \addlegendentry{Iceland};
                         \addplot table[col sep=comma,x=Jahr,y={Norway}] {GDP.csv};
                            \addlegendentry{Norway};
                             \addplot table[col sep=comma,x=Jahr,y={Sweden}] {GDP.csv};
                                \addlegendentry{Sweden};
                                 \addplot table[col sep=comma,x=Jahr,y={Germany}] {GDP.csv};
                                    \addlegendentry{Germany};
                                     \addplot table[col sep=comma,x=Jahr,y={EU28}] {GDP.csv};
                                        \addlegendentry{EU28};
          \end{axis}
        \end{tikzpicture}
    \end{document}


12/15/2017 12:27 AM
Probleme mit Darstellung einer Statistik mit pgfplot


Duplikat zu: Diagramm erstellen Achsenbeschriftung


Wie man erkennt, kann man die Zahlen auf der x-Achse nicht lesen. Ist es hier sinnvoll, die Zahlen nur bspw. in fünf Jahres-Schritten anzugeben oder kann man bspw. die Zahlen vielleicht schräg stellen, dass man sie lesen kann?

Öffne in Overleaf
\begin{filecontents*}{tourism.csv}
Jahr,Besucher
2016-01-01,1792201
2015-01-01,1289139
2014-01-01,997556
2013-01-01,807349
2012-01-01,672773
2011-01-01,565611
2010-01-01,488622
2009-01-01,493940
2008-01-01,502300
2007-01-01,485000
2006-01-01,422280
2005-01-01,374127
2004-01-01,360392
2003-01-01,320000
2002-01-01,277900
2001-01-01,296000
2000-01-01,302900
1999-01-01,262605
1998-01-01,232219
1997-01-01,201654
1996-01-01,200835
1995-01-01,189796
1994-01-01,179241
1993-01-01,157326
1992-01-01,142560
1991-01-01,143459
1990-01-01,141718
1989-01-01,130503
1988-01-01,128823
1987-01-01,129315
1986-01-01,113528
1985-01-01,97443
1984-01-01,85290
1983-01-01,77592
1982-01-01,72600
1981-01-01,72194
1980-01-01,65921
1979-01-01,76912
1978-01-01,75700
1977-01-01,72690
1976-01-01,70180
1975-01-01,71676
1974-01-01,68476
1973-01-01,74019
1972-01-01,68026
1971-01-01,60719
1970-01-01,52908
1969-01-01,44099
1968-01-01,40447
1967-01-01,37728
1966-01-01,34733
1965-01-01,28879
1964-01-01,22969
1963-01-01,17575
1962-01-01,17249
1961-01-01,13516
1960-01-01,12806
1959-01-01,12296
1958-01-01,10111
1957-01-01,9279
1956-01-01,9517
1955-01-01,9474
1954-01-01,6843
1953-01-01,6380
1952-01-01,4823
1951-01-01,4084
1950-01-01,4383
1949-01-01,5312
\end{filecontents*}
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{dateplot}
\begin{document}
\sffamily
\begin{tikzpicture}
    \sffamily
      \begin{axis}[
      date ZERO=1949-01-01,
        date coordinates in=x,
        no marks,
        width=16cm,
        height=6cm,
        enlargelimits=false,
        xticklabel={\tiny\year},
        xtick={1949-01-01,1950-01-01,1951-01-01,1952-01-01,1953-01-01,1954-01-01,1955-01-01,1956-01-01,1957-01-01,1958-01-01,1958-01-01,1959-01-01,1960-01-01,1961-01-01,1962-01-01,1963-01-01,1964-01-01,1965-01-01,1966-01-01,1967-01-01,1968-01-01,1968-01-01,1969-01-01,1970-01-01,1971-01-01,1972-01-01,1973-01-01,1974-01-01,1975-01-01,1976-01-01,1977-01-01,1978-01-01,1978-01-01,1979-01-01,1980-01-01,1981-01-01,1982-01-01,1983-01-01,1984-01-01,1985-01-01,1986-01-01,1987-01-01,1988-01-01,1988-01-01,1989-01-01,1990-01-01,1991-01-01,1992-01-01,1993-01-01,1994-01-01,1995-01-01,1996-01-01,1997-01-01,1998-01-01,1999-01-01,2000-01-01,2001-01-01,2002-01-01,2003-01-01,2004-01-01,2005-01-01,2006-01-01,2007-01-01,2008-01-01,2009-01-01,2010-01-01,2011-01-01,2012-01-01,2013-01-01,2014-01-01,2015-01-01,2016-01-01},
        xtick pos=left,
        xtick align=outside,
     %  ymin=0,ymax=50,
        %ytick={50,100,...,150},
         ymin=0,ymax=1 500 000,
     % assume math mode: nicht überprüfen ob der Mathemodus an ist
     % int detect: keine Nachkommastellen für ganze Zahlen anzeigen
     % 1000 sep={\,}: Kleiner Abstand zwischen 3er-Kolonnen
     yticklabel={\pgfmathprintnumber[assume math mode,int detect,1000 sep={\,}]{\tick}},
     % y-Achse nicht skalieren, sondern die tatsächliche Zahl im \tick angeben
     scaled y ticks=false,
     ytick style={draw=none},
     yticklabel pos=right,
     ymajorgrids=true,
    legend style={
             draw=none,
             legend cell align=left,
             at={(0,1.05)},% <-
             anchor=south west,% <-
             legend image code/.code={
               \filldraw[##1] (-.5ex,-.5ex) rectangle (1ex,1ex);
             },
           },
           legend columns=-1% <-
           ]
        \addplot table[col sep=comma,x=Jahr,y={Besucher}] {tourism.csv};
        \addlegendentry{Touristenzahlen pro Jahr};
      \end{axis}
    \end{tikzpicture}
\end{document}


12/11/2017 05:36 PM
Wie kann ich eine abschnittsweise definierte Funktion zeichnen?

Ich möchte mit pgfplots die Funktion zeichnen lassen. Wie mache ich das?

Die Funktion ist f(net) = {0: net < 0; 1: net >= 0.

Ich habe mir schon ein Koordinatensystem erstellt:

Öffne in Overleaf
\documentclass[11pt,a4paper]{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
        domain=-50:50,
        xmin=-50, xmax=50,
        ymin=0, ymax=1,
        samples=100;
        axis y line=center,
        axis x line=middle,
        xlabel={net},
        ylabel={y},
    ]
        %Funktion: \addplot...;
    \end{axis}
\end{tikzpicture}
\end{document}
  1. Wie kann ich die Funktion jetzt zeichnen lassen?
  2. Wie kann ich die an den Achsen abgetragenen Werte ändern (x-Achse ohne Werte und y-Achse nur 0.5 und 1)?

Vielen Dank für eure Hilfe


11/14/2017 08:40 PM
Wie kann ich die Fläche zwischen mehreren Pfaden mit Pfeilen kennzeichnen?

Hallo zusammen,

meine Skizze enthält eine Fläche (im Minimalbeispiel grau eingefärbt), die ich gerne mit gleichmäßig verteilten Pfeilen parallel zur y-Achse mit einem beliebigen Abstand füllen würde. Es geht quasi darum, die Kraftänderung zwischen den beiden Kurven darzustellen.

Ich würde mich sehr freuen, wenn jemand von euch eine Lösungsidee hätte!

Öffne in Overleaf
\documentclass[tikz, border=5pt]{standalone}   
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{
  arrows,
  decorations.pathreplacing,
  shapes.symbols,
  angles,
  quotes,
  calc
}
\usepgfplotslibrary{fillbetween}

\begin{document}

    \begin{tikzpicture}
  \pgfdeclarelayer{pre main}
  \pgfsetlayers{pre main,main}
  % Koordinatensystem
  \coordinate (A) at (0, 0) {}; 
  \coordinate (B) at (10, 0) {}; 
  \coordinate (C) at (0, 9) {};
  \coordinate (D) at (4, 0) {};
  \coordinate (E) at (8, 0) {};
  \coordinate (I) at (0, 6) {};
  \coordinate (a) at (4, 6) {};
  \coordinate (b) at (8, 3) {};
  \coordinate (c) at (0, 2) {};
  \coordinate (d) at (9, 5) {};
  % Koordinatensystempfeile
  \draw[->,line width=0.4mm] (A) -- (B) node[below] {$v$};
  \draw[->,line width=0.4mm,name path=AtoC] (A) -- (C) node[left] {$F_\mathrm{T}$};
  % Koordinatenstriche
  \draw[-,line width=0.4mm] (D) -- (4, -0.1) node[below] {$v_\mathrm{ue1}$};
  \draw[-,line width=0.4mm] (E) -- (8, -0.1) node[below] {$v_\mathrm{max}$};
  \draw[-,line width=0.4mm] (I) -- (-0.1, 6) node[left] {$F_\mathrm{vue1}$};
  % Verbindungslinien
  \draw[dotted] (D) -- (a);
  % Graphen
  \draw[name path=KurveI] (I) -- (a);
  \draw[name path=KurveII,bend left=20] (b) to (a);
  \draw[name path=KurveIII,dotted,bend left=20](d) to (c);

    \path [%draw,line width=3,blue,
    name path=IandIV,
    intersection segments={
        of=KurveI and AtoC,
        sequence={A1 -- B0[reverse]}
    }];

  \path [%draw,line width=3,blue,
    name path=IIIandII,
    intersection segments={
        of=KurveIII and KurveII,
        sequence={A1[reverse] -- B1}
    }];

  \pgfonlayer{pre main}
  \fill [
    gray!20,
    intersection segments={
       of=IandIV and IIIandII,
        sequence={A1 -- B1[reverse]},
    }
  ];
  \endpgfonlayer

\end{tikzpicture}

\end{document}

alt text


11/10/2017 12:48 PM
PGFPLOTS - Zwei y-Achsen übereinander mit gleicher Datenquelle

Hallo TexWelt-Gemeinde,

Ich habe ein an sich ein kleines Problem mit einem Diagramm. Und zwar möchte ich mit Latex und PGFPlots 4 Graphen visualisieren. Die Daten dafür stammen aus Excel und liegen als .csv-Datei vor. Jetzt ist nur das Problem, dass diese Messwerte eine Abhängigkeit zwischen Kraft und Weg darstellen und ab einem Gewissen Zeitpunkt sich gegenseitig verdecken, so dass nur noch die zu letzt geplotete Kurve sichtbar ist.

Aus diesem Grund hab ich mir vorgestellt, die y-Achse in zwei Teile zu splitten. Im unteren Teil soll der ytick={0,1,2,...,10} und im oberen Teil der ytick={10,10.5,11,..., 16} sein, damit die Graphen weiter auseinander kommen.

Öffne in Overleaf
\documentclass{scrbook}
\usepackage{pgfplots} 
\begin{document}
\begin{tikzpicture}

\begin{axis}[width=16cm, height=8cm, xlabel=Kraft $F$ in $kN$,ylabel=Weg $s$ in $cm$, title=\textbf{Kraft-Weg-Diagramm }, ytick={0,0.5,1,...16}]
\addplot [mark = *, color = red!0!blue]  table[x=Pressung, y=Weg1, col sep= semicolon] {Datei.csv}

\addplot [mark = *, color = red!33!blue]  table[x=Pressung, y=Weg2, col sep= semicolon] {Datei.csv}

\addplot [mark = *, color = red!66!blue]  table[x=Pressung, y=Weg3, col sep= semicolon] {Datei.csv}

\addplot [mark = *, color = red!100!blue]  table[x=Pressung, y=Weg4, col sep= semicolon] {Datei.csv}
\end{axis}
\end{tikzpicture}
\end{document

Pressung;Weg1;Weg2;Weg3;Weg4

0.011;0.1;5.35;7.23;7.03

0.15;3.63;8.73;9.9;9.93

0.25;5.5;9.63;10.58;10.63

0.35;6.68;10.13;11;11.08

0.5;7.7;10.63;11.45;11.48

0.75;8.93;11.25;11.93;11.9

1;9.65;11.63;12.25;12.28

1.5;10.6;12.15;12.63;12.68

2;11.23;12.55;12.93;12.95

2.5;11.6;12.88;13.15;13.18

3;11.98;13.03;13.3;13.33

3.5;12.25;13.18;13.45;13.48

4;12.45;13.4;13.53;13.6

4.5;12.68;13.5;13.63;13.68

5;;13.55;13.73;13.83

5.5;13.03;13.7;13.8;13.93

6;13.18;13.78;13.88;14

6.5;13.35;13.83;13.95;14.05

7;13.45;13.93;14.05;14.13

7.5;13.55;14;14.1;14.18

8;13.65;14.05;14.15;14.23

8.5;13.73;14.15;14.23;14.28

9;13.8;14.2;14.3;14.33

9.5;13.85;14.28;14.33;14.38

10;13.95;14.3;14.38;14.44