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

07/04/2019 03:15 AM
pgfplots: addplot coordinates bei zuvor definierten Koordinaten funktioniert nicht

alt text

Ich bestimme mit
\draw [name intersections={of=g and h, name=S, total=\t}]
die Schnittpunkte zweier Kurven.
Diese sind nun (S-1) und (S-2).

Aber mit \addplot[mark=*, mark size=1.75pt] coordinates{(S-1) (S-2)}; kann ich sie nicht einzeichnen.

Hintergrund: Ich dachte am elegantesten wäre es, die Schnittpunkte, z.B. A(-1.56,2.44), mit nodes near coords oder ähnlich eintragen.

Was könnte ich hier tun?

\documentclass[border=5pt, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usepackage{amsmath, amssymb}
\usetikzlibrary{intersections}
\begin{document}

\begin{tikzpicture}[font=\footnotesize,
/pgf/number format/NumberStyle/.style={
fixed, 1000 sep={,}, 
%precision=3,
},
]
\begin{axis}[
axis lines = middle,
axis line style = {-latex},
]

\addplot[name path=g, blue, domain=-5:4] {\x+4};
\addplot[name path=h, red, domain=-3.3:3.3] {x^2};

% Geht
\draw [name intersections={of=g and h, name=S, total=\t}] [fill=white]
\foreach \s/\Name/\Anker in {1/A/east, 2/B/west}{(S-\s) circle (2pt) node[anchor=\Anker] {
\pgfplotspointgetcoordinates{(S-\s)}
$\Name (
\pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/x}},
\pgfmathprintnumber[NumberStyle]{\pgfkeysvalueof{/data point/y}}
)$ 
}};

% Geht nicht 
%\addplot[mark=*, mark size=1.75pt] coordinates{(S-1) (S-2)};
%\addplot[mark=*, mark size=1.75pt] coordinates{(A) (B)};
\end{axis}
\end{tikzpicture}

\end{document}


06/21/2019 08:16 PM
GNUPLOT für komplizierte Rechnungen verwenden

Crosspost: https://tex.stackexchange.com/questions/496897/pgfmath-gnuplot-how-to-use-gnuplot-for-complicated-calculations


Ich habe mich gefragt, ob man gnuplot abgesehen von Graphen auch für schwierige Rechnungen verwenden kann.
Z.B. für \pgfmathsetmacro{\x}{0.02} \pgfmathsetmacro{\y}{2*11000*(1 - 1.40576 - cos(\x) + sqrt(1.40576^2 - sin(\x)^2))}
erhalte ich 'Dimensions to large'.

Wie könnte man hier gnuplot einsetzen?

MWE:

alt text

% arara: pdflatex: {shell: yes}
\documentclass[margin=5mm, varwidth]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\begin{document}
\pgfmathsetmacro{\x}{0.02}
%\pgfmathsetmacro{\y}{2*11000*(1 - 1.40576 - cos(\x) + sqrt(1.40576^2 - sin(\x)^2))}
Geht nicht: % \y

\begin{tikzpicture}
\begin{axis}[title=Geht:]
\addplot[blue,domain = {-0.07:0.07}]plot gnuplot[samples=500,id=eins]{2*11000*(1 - 1.40576 - cos(x) + sqrt(1.40576^2 - sin(x)^2))};
\end{axis}
\end{tikzpicture}
\end{document}


06/19/2019 06:10 PM
Warum entspricht der Graph bei pgfplots nicht seinem echten Verlauf?

Hallo miteinander,

Ich habe für mein Anfängerpraktikum im Physik-Studium den Brechungsindex einer Plexiglasscheibe bestimmen sollen und würde mein Ergebnis gerne in Latex graphisch mit pgfplots präsentieren. Mein Code sieht folgendermaßen aus:

`\begin{figure}
    \centering
        \begin{tikzpicture}
            \begin{axis}[
            height = 1.2*\plotheight,
            width = 1.2*\plotwidth,
            xtick = {},
            ytick = {}, 
            xlabel = $\alpha$ $\si{[rad]}$,
            ylabel = $\Delta s$ $ \si{[\micro m]}$, 
            xmin = -0.07, 
            xmax = 0.07, 
            ymin = 0, 
            ymax = 14.500,
            grid = major,
            smooth,
            scaled ticks=false,
            tick label style={/pgf/number format/fixed}
               ]

                \addplot[blue,domain = {-0.07:0.07}]{2*11000*(1 - 1.40576 - cos(deg(x)) + sqrt(1.40576^2 - sin(deg(x))^2))};                    
        \end{axis}
      \end{tikzpicture} 
    \caption{generic caption}
    \label{abb;brechungsindex}
  \end{figure}`

Und so sieht der Plot aus:

alt text

Bitte beachtet, dass ich den Befehl "smooth" schon verwendet habe. Eigentlich sollte der Plot parabelförmig sein, das bestätigen auch Desmos und Geogebra im gleichen Bildausschnitt.

Danke schon mal für die Mühen,

Adrian


05/27/2019 09:54 PM
Plot Titel und X-Achse zu weit entfernt

Hallo ich habe mal eine kurze Frage.

Ich habe jetzt einen Plot in Overleaf erstellt. Aber der Titel ist sehr weit entfernt und auch unten ist viel Platz, aber wenn ich die Höhe ändere denn überlappen sich die Balken was nicht schön aussieht.

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{pgfplots}
\title{test}
\author{x}
\date{May 2019}
\begin{document}

\maketitle

\section{Introduction}

\begin{tikzpicture}
  \begin{axis} [
  title  = \textbf{Neuzulassung aufgeschlüsselt nach Branche},
    width=13cm,
    height=14cm,
    xbar,
    y axis line style = { opacity = 0 },
    tickwidth         = 0pt,
    enlarge y limits  = 0.2,
    enlarge x limits  = 0.02,
    symbolic y coords = {2010, 2011,2012,2013,2014,2015,2016,2017},
    ytick=data,
    xlabel={Neuzulassung nach Branche in Millionen},
    nodes near coords,xlabel near ticks,
  ]
  \addplot coordinates { (1.436404,2010) (1.640112,2011)(1.651802,2012)
(1.590312,2013) (1.672739,2014) (1.812898,2015) (1.856581,2016) (1.871578,2017)};
  \addplot coordinates { (1.243759,2010)         (1.274066,2011) (1.176115,2012) (1.120125,2013) (1.099033,2014) (1.098068,2015) (1.173088,2016) (1.224943,2017)};
\addplot coordinates { (2.916260,2010)         (3.173634,2011) (3.082504,2012) (2.952431,2013) (3.036773,2014) (3.206042,2015) (3.351607,2016) (3.441262,2017)};
  \legend{Gewerliche Nutzung, Private Nutzung, Gesamt}
  \end{axis}
\end{tikzpicture}

\end{document}

Ich hoffe es gibt eine Lösung. Danke für die Hilfe.

Liebe Grüße


05/13/2019 03:47 PM
Variables Diagramm

Das Diagramm sieht bei 7 Einträgen in der Liste in Ordnung aus. Wenn sich aber die Anzahl der Einträge ändert bleibt die Breite des Diagramms gleich. Wie kann ich die Breite variabel machen?

Öffne in Overleaf
% \RequirePackage{filecontents}  % evtl. brauchbar
\begin{filecontents}{data.csv}
    Nr, Name, Vorname, Stimmen
    1, Name1, Vorname1, 13
    2, Name2, Vorname2, 36
    3, Name3, Vorname3, 15
    4, Name4, Vorname4, 13
    5, Name5, Vorname5, 6
    6, Name6, Vorname6, 12
    7, Name7, Vorname7, 25
\end{filecontents}

\documentclass[tikz]{standalone}
\usepackage[utf8]{inputenc}

\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=1.16}

\makeatletter
\pgfplotsset{
    /pgfplots/flexible xticklabels from table/.code n args={3}{%
        \pgfplotstableread[#3]{#1}\coordinate@table
        \pgfplotstablegetcolumn{#2}\of{\coordinate@table}\to\pgfplots@xticklabels
        \let\pgfplots@xticklabel=\pgfplots@user@ticklabel@list@x
    }
}
\makeatother

\newcommand{\saeulendiagramm}[1]{   
    \begin{tikzpicture}
        \begin{axis}[
            ybar,
            xtick=data,
            ymajorgrids=true,
            bar width=0.7cm, 
            xtick align=inside,
            ylabel={Stimmen},
            flexible xticklabels from table={#1}{Name}{col sep=comma},
            x tick label style={font=\normalsize, rotate=45, anchor=east}
        ]
            %\addplot[fill=blue] table [x index=0,y index=3, col sep = comma] {#1};
            \addplot+[fill=blue] table[x expr=\coordindex,y index = 3, col sep=comma] from {#1};
        \end{axis}
    \end{tikzpicture}
}

\begin{document}
    \saeulendiagramm{data.csv}
\end{document}


04/26/2019 12:33 PM
Quader aus Datensatz plotten

Hallo,

Ich habe einen Datensatz mit Längen-, Breiten- und Höhenangaben für verschiedene Quader. Diese Quader möchte ich nun an einer bestimmten Stelle im Raum plotten. Für die Positionsangabe würde es sich für mich anbieten, die Koordinaten eines Eckpunktes des Quaders anzugeben.

Der Datensatz ist eine .txt Datei und ist wie folgt angeordnet:

Öffne in Overleaf
Laenge Breite Hoehe x y z

20 10 5 0 0 0

40 20 10 10 0 0

Aber ich könnte den Datensatz auch als csv exportieren. Hat jemand eine Idee, wie ich diesen Datensatz elegant als 3D Plot zu meiner tikz-grafik hinzufügen kann?

Erste Überlegungen:

Öffne in Overleaf
 \begin{tikzpicture} 
  \begin{axis}[view/h=30, xlabel=$x$,ylabel=$y$]
  \addplot3 [mark=cube, 
                       cube/size x= {Laenge} ,
                       cube/size y= {Breite} ,
                       cube/size z= {Hoehe}]
                       table {data.txt};
\end{axis}
\end{tikzpicture}

Allerdings werden die Variablen aus dem Datensatz nicht erkannt bei der cube/size Anpassung.


03/11/2019 10:09 PM
PGFPlot Y-Achse nullen

Hallo zusammen, ich bin neu in Latex und im Bereich pgfplots. Kann mir zufällig jemand erklären wie ich die Y-Achse genullt bekomme? Momentan beginnen meine Balken zwar bei Null, aber es wird ein Wert von -50 auf der Y-Achse angezeigt.

Öffne in Overleaf
\begin{center}
\begin{tikzpicture}
    \begin{axis}[
        width=12cm,
        height=8cm,
        ybar,
        ymin=0,
        ymax=120,
        enlarge x limits=0.5, 
        enlarge y limits=0.5,
        legend style={at={(0.5, -0.2)},
        anchor=north,
        legend columns=1}, 
        ylabel={Beschriftung}, 
        xtick=\empty,
        nodes near coords,
        legend cell align={left}
    ] 
    \addplot coordinates {(1, 28.56)};
    \addlegendentry{A};
    \addplot coordinates {(2, 85.56)};
    \addlegendentry{B};
    \addplot coordinates {(3, 41.56)};
    \addlegendentry{C};
    \addplot coordinates {(4, 80.56)};
    \addlegendentry{D};
    \addplot coordinates {(5, 64.71)};
    \addlegendentry{E};
    \addplot coordinates {(6, 44.08)};
    \addlegendentry{F};
    \addplot coordinates {(7, 15.52)};
    \addlegendentry{G};
    \addplot coordinates {(8, 25.71)};
    \addlegendentry{H};
    \addplot coordinates {(9, 10.57)};
    \addlegendentry{I};
    \addplot coordinates {(10, 7.64)};
    \addlegendentry{J};
    \end{axis} 
\end{tikzpicture}
\end{center}


02/17/2019 10:36 PM
Plotte Entropy mit tikz

Hallo zusammen,

folgender Code sollte Entropy der Binomialverteilung für n=1,..,5 plotten, tut es aber nicht. Wo ist das Problem?

Öffne in Overleaf
\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[scale=1]
    % Axis
    \node (1) at (0,6.5) {$H(x)$};
    \node (2) at (7.5,0) {$p$};
    \begin{axis}[
        samples=100,
        smooth,
        domain=0.01:0.99,
        ]
            \foreach \N in {1,...,5} {%
            \addplot+ [mark = none] gnuplot[raw gnuplot] {%
                set samples 100;
                b(k, n, p) = n!/(k!*(n-k)!)*p**k*(1-p)**(n-k);
                plot[0.01:0.99] sum [k=0:\N] -b(k,\N,x)*log2(b(k,\N,x))
            };
            \addlegendentryexpanded{$B_\N$}
        }
        \end{axis}
\end{tikzpicture}
\end{document}


02/13/2019 04:02 PM
Probleme bei Ausgabe einer PGFplot Datei in Adobe

Ich bin neu und komme trotz intensiver suche im Internet mit meinem Problem nicht voran. Ich erstelle mit Hilfe von pgfplot ein Bild das einwandfrei im Texmaker dargestellt wird. Öffne ich die zugehörige PDF-Datei in meinem Adobe Reader wird lediglich noch eine Farbe dargestellt falls die Option shader=interp gewählt wird. Ohne die Option entsprechen sich die ausgaben in Texmaker und Adobe Reader.

Anbei habe ich beide Bilder als Screenshot beigefügt.

Wäre sehr nett wenn mir jemand mit diesem Problem weiterhelfen könnte.

Hier mein Code:

Öffne in Overleaf
\documentclass[border=20mm]{standalone}
\usepackage{pgfplots}  
\pgfplotsset{compat=1.16}% <-- moves axis labels near ticklabels (respects tick label widths)  
\usepgfplotslibrary{patchplots}  
\usepgfplotslibrary{fillbetween} % LATEX and plain TEX  
\usetikzlibrary{pgfplots.colormaps} % LATEX and plain TEX  
\def\pgfsysdriver{pgfsys-pdftex.def}

\begin{document}
\begin{scriptsize} 
  \begin{tikzpicture}
    \begin{axis}[  
      hide axis,
      colormap/jet,  
      enlargelimits=false,
      colorbar horizontal,
      scale mode=scale uniformly]
      \addplot [
        matrix plot,
        shader=interp,
        point meta=explicit  
      ] table  [x=x,y=y,meta=c]
      {"Knoten.dat"};
    \end{axis}   
  \end{tikzpicture}
\end{scriptsize}  
\end{document}

alt text


01/05/2019 10:50 PM
Pgfplotsinvokeforeach- Schleife: Wert speichern

Hallo.

Ich habe versucht, eine Wahrscheinlichkeitsfunktion und die dazugehörige Verteilungsfunktion in zwei verschiedenen Koordinatensystemen darzustellen.

Die Wahrscheinlichkeitsfunktion hat auch wunderbar funktioniert, jedoch gibt es Probleme bei der Verteilungsfunktion. Ich möchte eine Schleife erstellen, die in jedem Durchlauf einen Teil der Funktion zeichnet, genauer gesagt die Zuordnung x-->F(x).

Das Problem ist nun aber, dass der Wert F(x) auf den vorigen Werten immer aufbaut. D.h. ich brauche eine Möglichkeit, um diesen Wert zu speichern und für den nächsten Schleifendurchgang verwenden zu können. Ich habe bereits einiges versucht, aber es scheinen foreach- Schleifen nicht in der axis-Umgebung zu funktionieren. Ich habe jetzt auch viel zu diesen pgfplotsinvokeforeach- Schleifen gelesen, aber bisher konnte ich noch keine Lösung auf das Problem finden.

Ich habe hier etwas erstellt, was zwar allem Anschein nach den Wert speichert (wobei ich mir da auch nicht so sicher bin), jedoch verändert das gleichzeitig auch alle anderen Werte aus vorigen Schleifendurchgängen, was dafür sorgt, dass sich alle Werte verschieben und auf eine Höhe kommen, was nicht sein sollte.

Hier wäre mal so das Minimalbeispiel:

Öffne in Overleaf
\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{pgfplots}

\begin{document}

\begin{figure}[h]
\begin{minipage}{0.5\textwidth}
\centering
    \begin{tikzpicture}
        \begin{axis}[
        axis lines=middle,
        xmin=0,
        xmax=5,
        height=6cm,
        width=8cm,
        ymin=0,
        ymax=0.4,
        xlabel=$x$,
        ylabel=$p_i$,
        xlabel style=right,
        ylabel style=above,
        enlargelimits=0.05,
        ]

        \draw[fill=red!20!white] \foreach   \i in {1,...,5  }{
        (axis cs:{\i-0.5},{0})
        rectangle 
        (axis cs:{\i+0.5},{0.25*exp((\i-1)*ln(0.75))})
        }; %Rechtecke; es gilt: P(X=k)=p(1-p)^(k-1)

        \end{axis}
    \end{tikzpicture}
\end{minipage}
\begin{minipage}{0.5\textwidth}
\centering
    \begin{tikzpicture}
        \begin{axis}[
        axis lines=middle,
        xmin=0,
        xmax=6,
        height=6cm,
        width=8cm,
        xlabel=$x$,
        ylabel=$F(x)$,
        xlabel style=right,
        ylabel style=above,
        enlargelimits=0.05,         
        ymin=0,
        ymax=1.5
        ]
        \pgfmathsetmacro{\LastHeight}{0}

        \pgfplotsinvokeforeach{1,...,5}{
        \pgfmathsetmacro{\ActualHeight}{0.25*exp((#1-1)*ln(0.75))+\LastHeight}
        \draw[red,thick](axis cs:{#1},{\ActualHeight}) -- (axis cs:{#1+0.5},{\ActualHeight});
        \global\let\LastHeight\ActualHeight

        }

        \end{axis}
    \end{tikzpicture}
\end{minipage}
\end{figure}

\end{document}

Ich hoffe sehr, dass meine Frage verständlich formuliert ist. Vielen Dank für die Antworten und viele Grüße!


11/18/2018 05:22 PM
pgfplots: Wie setze ich die Achsenbeschriftung mittig zu den Balken?

Kurze Frage: Wie kann ich denn die Balken so setzen, dass die Ziffern auf der x-Achse mittig zu den Balken stehen? Ich habe das Problem, dass die x-Achse Kategorien beschreibt, und ich gerne eindeutig kennzeichnen würde, welcher Balken welche Kategorie beschreibt. Ich habe allerdings schon abgehakt, da deine Lösung gegeben meines Posts natürlich perfekt ist.

(Anmerkung: Das war ursprünglich ein Kommentar zu einer Antwort auf Histogramm und Graph in ein Schaubild und ist somit eine Folgefrage.)

alt text
(Code ohne rote Kurve)

Öffne in Overleaf
\documentclass[border=3mm,tikz,preview]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}% <- compat immer angeben!

\begin{document}
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    area style,
    ]
\addplot+[ybar interval,mark=no] plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\end{axis}
\end{tikzpicture}
\end{document}


11/18/2018 12:16 PM
Histrogramm und Graph in ein Schaubild

Die Situation ist folgendermaßen.

(1) Gegeben sind Datenpunkte (X1,Y1),...,(Xn,Yn) mit Xi, Yi>0 für alle i.

(2) Darüber hinaus ist der Graph einer Funktion f gegeben, deren Definitionsbereich und Wertebreich Teilmengen der positiven reellen Achse sind.

Ich würde gerne bzgl. (1) ein Histogramm zeichnen und in das gleiche Schaubild bzgl. (2) den Graphen der Funktion zeichnen.

Hier ein MWE (Quelle: TeX.SE)

Öffne in Overleaf
\documentclass[border=3mm,
               tikz,
               preview
               ]{standalone}
\usepackage{pgfplots}

    \begin{document}
%---------------------------------------------------------------%
\begin{tikzpicture}
\begin{axis}[
    ymin=0, ymax=55,
    minor y tick num = 3,
    area style,
    ]
\addplot+[ybar interval,mark=no] plot coordinates { (1, 5) (5, 35) (10, 50) (15, 30) (20, 15) (25, 0) };
\end{axis}
\end{tikzpicture}
    \end{document}

Was mir hier fehlt:

  1. Achsenbeschriftung.
  2. Graph der Funktion f(x)=exp(-x)


10/10/2018 10:30 PM
Wie blende ich die Skalierung von nur einer Achse aus?

Ich möchte die Skalierung von nur einer Achse ausblenden, aber das Kästchengittter behalten.

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis x line=middle, 
    axis y line=middle, 
    x=5cm,   
    y=0.5cm,    
    grid =major, 
    xtick={-100,-99,...,100},
    ytick={-100,-95,...,100}, 
    xmin=0.0,  %-0.5  %<-
    xmax=10.5,   
    ymin=-4.50, 
    ymax=74.5,   
    scale = 0.2,
x axis line style={shorten >=-0mm, shorten <=-5mm},
y axis line style={shorten >=-0mm, shorten <=-5mm}
        ]
\end{axis}
\end{tikzpicture}

\end{document}


10/10/2018 09:18 PM
Wie kann man bei pgfplots die Kästchen unabhängig von der Skalierung konfigurieren?

Bei meinem Beispiel ragen z.B. die Kästchen links aus dem Graphen. Wie konfiguriere ich die Kästchen, um sie in von mir gesetzten Grenzen in x- und y-Richtung zeichnen lassen kann?

Öffne in Overleaf
\documentclass[11pt,pagesize]{scrartcl}
\usepackage{tikz,pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
    axis x line=middle, 
    axis y line=middle, 
    x=5cm,   
    y=0.5cm,    
    grid =major, 
    xtick={-100,-99,...,100},
    ytick={-100,-95,...,100}, 
    xmin=-0.5,  
    xmax=10.5,   
    ymin=-4.5, 
    ymax=74.5,   
    scale = 0.2      
        ]
\end{axis}
\end{tikzpicture}

\end{document}


10/08/2018 09:49 AM
pgfplots (bugs 193 und 109): 'visualization depends on' funktioniert nicht mit Inlinetables

alt text

Ich wollte einmal die Bugs 193 und 109 zur Diskussion stellen.

Wenn man eine Inlinetable mit \pgfplotstableread erzeugt, lässt sich kein 'visualization depends on verwenden.

Hat jemand eine Idee, wie man das beheben könnte?

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
%\documentclass[10pt,a4paper]{report}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableread[col sep=space]{
x y w1 w2
1 1 2 A
2 2 1 B
3 3 4 C
4 4 3 D
}\data

\pgfplotstablesave{\data}{pgfplotstempout.dat}

\begin{tikzpicture}
\begin{axis}[title=Geht:]
\addplot[
    scatter,
    only marks,
    scatter src=explicit,
    visualization depends on=value \thisrow{w2}\as\wtwo,
    nodes near coords=\wtwo,
]
table[x=x,y=y,meta=w1]{pgfplotstempout.dat};
\end{axis}
\end{tikzpicture}

% Bugs
% https://sourceforge.net/p/pgfplots/bugs/193/
% und 
% https://sourceforge.net/p/pgfplots/bugs/109/
\begin{tikzpicture}
%\begin{axis}[title=Geht nicht]
%\addplot[
%    scatter,
%    only marks,
%    scatter src=explicit,
%    visualization depends on=value \thisrow{w2}\as\wtwo,
%    nodes near coords=\wtwo,
%]
%table[x=x,y=y,meta=w1]{\data}; %error
%\end{axis}
\end{tikzpicture}

\end{document}


09/23/2018 11:34 AM
Was sind bekannte Probleme bei pgfplots?

Anlehnend an die Frage https://texwelt.de/wissen/fragen/23001/was-sind-bekannte-probleme-bei-tikz ein eigener Faden für pgfplots-Probleme.

Was ist denn bekannt, so dass man als Nutzer von pgfplots darauf acht geben kann, und welche Lösungsmöglichkeiten oder Workarounds gibt es jeweils?

Bemerkenswert ist auch die Seite https://sourceforge.net/p/pgfplots/bugs/


09/20/2018 10:27 PM
pgfplots: Geeignete Werte auslesen und verwenden

alt text

Ich habe einen Plot, der mir die Dimensionen des Schaubilds festlegt:

Öffne in Overleaf
% Plot Legt Dimensionen fest
\addplot+[]
table[header=true]{ % SOLL x expr ={\xMax}
x  y
1 2
3 4
};

Nun habe ich einen zweiten Plot, der Daten enthält, die alle an der selben Stelle stehen soll (klingt komisch hat aber Sinn): x expr =\xAlias, y expr=\yAlias

Öffne in Overleaf
% Aliaswerte
\pgfmathsetmacro{\xAlias}{2}
\pgfmathsetmacro{\yAlias}{1}

% Plot dient nur für Annotationen
\addplot+[nodes near coords={\xAlias,\yAlias}]
table[header=true, x expr =\xAlias, y expr=\yAlias]{ % 
a
1
2
3
};

Frage: Wie kann ich Werte xAlias, yAlias automatisch auslesen und dafür sorgen, dass xAlias, yAlias in allen Fällen innerhalb der durch den 1. Plot festgelegten Dimensionen liegen?

Ich hatte an sowas wie den Mittelwert aus xmin, xmax bzw. ymin, ymax gedacht. Aber die Max- und Minwerte sind vor Abschluss aller Plots scheints nicht verarbeitbar.

Vollständiges MWE:

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[]

\pgfkeysgetvalue{/pgfplots/xmin}{\xmin}
\pgfkeysgetvalue{/pgfplots/xmax}{\xmax}

% Plot Legt Dimensionen fest
\addplot+[]
table[header=true]{ % SOLL x expr ={\xMax}
x  y
1 2
3 4
};

% Aliaswerte
\pgfmathsetmacro{\xAlias}{2}
\pgfmathsetmacro{\yAlias}{1}

% Plot dient nur für Annotationen
\addplot+[nodes near coords={\xAlias,\yAlias}]
table[header=true, x expr =\xAlias, y expr=\yAlias]{ % 
a
1
2
3
};

\end{axis}
\end{tikzpicture}
\end{document}


09/20/2018 04:50 PM
pgfplots: Wie füge ich den ausgelesenen Wert '/pgfplots/xmax' als 'x expr' ein?

alt text

Ich lese \def\xMax{\pgfkeysvalueof{/pgfplots/xmax}} aus; das tut auch: ich kann mir nodes near coords={\xMax} anzeigen lassen.

Was muss ich tun, damit ich auch x expr ={\xMax} beim table plot verwenden kann?

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[]

\def\xMax{\pgfkeysvalueof{/pgfplots/xmax}}
\pgfmathsetmacro{\xMAX}{\pgfkeysvalueof{/pgfplots/xmax}}

\pgfmathsetmacro{\xTest}{0}

\addplot+[nodes near coords={\xMax}]
table[header=true, x expr ={1}]{ % SOLL x expr ={\xMax}
x  y
1 2
3 4
};
\end{axis}

\end{tikzpicture}
\end{document}


09/18/2018 06:32 PM
pgfplots (table plot): inlinetable mit Textspalte plotten und beschriften

Geschlossen: Ich glaube, das geht nicht. https://sourceforge.net/p/pgfplots/bugs/193/

alt text

Ich habe für einen table plot eine inlintable

Öffne in Overleaf
\pgfplotstableread[
row sep=\\, col sep=comma, trim cells
] {
x    ,    y  ,       a  ,   b   ,     Text    \\
5    ,    8  ,      1  ,   2  ,      A   \\
17  ,    2  ,      3  ,   3  ,      B  \\
49  ,    7  ,      1  ,   4  ,      C  \\
}\Test

Seit ich eine Spalte Text ergänzt habe, kann ich nicht mehr

Öffne in Overleaf
visualization depends on={value \thisrowno{3} \as \text},
visualization depends on={value \thisrowno{4} \as \Text},
nodes near coords={\text,  \Text}

verwenden, also nicht den Spalteninhalt anzeigen lassen.

Was muss ich da einstellen?

Hinweis: col sep=comma habe ich nur versuchsweise ergänzt; am liebsten hätte ich hier kein blödes Komma drin.

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
%\usepackage{pgfplotstable}
\pgfplotsset{compat=1.13}

\begin{document}

\pgfplotstableread[
row sep=\\, col sep=comma, trim cells
] {
x    ,    y  ,       a  ,   b   ,     Text    \\
5    ,    8  ,      1  ,   2  ,      A   \\
17  ,    2  ,      3  ,   3  ,      B  \\
49  ,    7  ,      1  ,   4  ,      C  \\
}\Test

\begin{tikzpicture}
\begin{axis}[]

\addplot+[
visualization depends on={value \thisrowno{3} \as \text},
visualization depends on={value \thisrowno{4} \as \Text},
nodes near coords={text,  Text},
] table[
%x=x,y=y
x index=0, y index=3, 
%row sep=\\, col sep=comma, trim cells   % scheints nicht benötigt
] {\Test};
\end{axis}
\end{tikzpicture}

\end{document}


09/18/2018 04:32 PM
pgfplots (patch) / pgfplotstable: Datentabellen aus dem Code auslagern

Geschlossen: Ich glaube, das geht nicht. https://sourceforge.net/p/pgfplots/bugs/193/


Für einen patch plot mit (sehr) umfangreichen Tabellen habe ich eine Tabelle Kantenverbindungsdaten und eine Koordinatentabelle; letztere wird zweimal gebraucht, einmal zur Zeichnung der Punkte, einmal zur Beschriftung (nodes near coords).

Die Tabellen auslagern mit filecontents will pgfplots nicht haben, sofern row sep=\\ vorkommt (was hier scheints gebraucht wird...).

Also dachte ich an die Verwendung von \usepackage{pgfplotstable}, etwa

Öffne in Overleaf
% Geht nicht ==========================
\pgfplotstableread[header=true, row sep=\\] {
Nr x y Textposition     \\
1 2 2    north                     \\%0
1 2 2    north                     \\%1
2 0 1    south                       \\%2
3 0 0    north                      \\%3
}\Koordinatentabelle

und dann an den zwei benötigten Stellen nur noch

table[header=true, x index=1, y index=2, row sep=\\] {\Koordinatentabelle}

Wie muss ich das richtig machen?

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots, pgfplotstable}
\usepgfplotslibrary{patchplots}

\begin{document}

% Geht nicht ==========================
%\pgfplotstableread[header=true, row sep=\\] {
%Nr x y Textposition     \\
%1 2 2    north                     \\%0
%1 2 2    north                     \\%1
%2 0 1    south                       \\%2
%3 0 0    north                      \\%3
%}\Koordinatentabelle
%
%\pgfplotstableread[header=true, row sep=\\] {
%Startpkt Endpkt colordata \\ 
%1 1 \\ 
%2 1 \\ 
%3 1 \\
%}\Kantentabelle

% ===========================

\begin{tikzpicture}
\begin{axis}[hide axis]

% Koordinaten und Kantenverbindungen ===========
\addplot+[
table/row sep=\\, % Muss wohl so sein!?
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
patch table with point meta={%
Startpkt Endpkt colordata \\ 
1 1 \\ 
2 1 \\ 
3 1 \\
}
] table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y Textposition     \\
1 2 2    north                     \\%0
1 2 2    north                     \\%1
2 0 1    south                       \\%2
3 0 0    north                      \\%3
};

% Beschriftungen ===========
\addplot[only marks,
visualization depends on={value \thisrowno{3} \as \Anker},
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\punktnummer},
every node near coord/.append style={anchor=\Anker}
] table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y Textposition     \\
1 2 2    north                     \\%0
1 2 2    north                     \\%1
2 0 1    south                       \\%2
3 0 0    north                      \\%3
};

\end{axis}
\end{tikzpicture}

\end{document}


09/17/2018 08:36 PM
pgfplots (patch / table plot): Verwendung eines Ankers für 'nodes near coords' bei gekillter Mehrfachbeschriftung

Anschlussfrage zu

https://texwelt.de/wissen/fragen/22892/pgfplots-patch-table-plot-mehrfache-beschriftung-bei-nodes-near-coords-durch-patch-table-with-point-meta


Im o.g. Thread wird eine Mehrfachbennung von nodes near coords durch eine Schleifenmethode von @murmeltier verwendet.

Ich möchte hierbei die Koordinatentabelle um einen Anker für die Textposition erweitern.

Öffne in Overleaf
% Koordinatentabelle
    table[header=true, x index=1, y index=2, row sep=\\] {
    Nr x y  Testposition\\
    0 0 0     south        \\  % 0. Aliaspunkt. SOLL:  south als Default
    1 1 0                    \\
    2 0 1       north       \\ % Ausnahme
    3 1 1                      \\ 
    };

Leider wird dabei nur letzte angebene Anker verwendet north. Eigentlich sollen die nodes near coords standardmäßig oberhalb der Punkte stehen, nur in angegeben Ausnahmefällen unterhalb.

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

% Methode festlegen, die Mehrfachplatzierung (je nach Pfadanzahl) 
% von Punktbezeichnungen verhindert ============
\xdef\LstPN{0}
\newif\ifDupe
\pgfplotsset{avoid dupes/.code={\Dupefalse
\foreach \X in \LstPN
{\pgfmathtruncatemacro{\itest}{ifthenelse(\X==\punktnummer,1,0)
% Geht natürlich nicht
%\pgfmathsetmacro{\Ankertest}{ifthenelse(\anker="north","north","south")
}
\ifnum\itest=1
\global\Dupetrue
\breakforeach
\fi}
\ifDupe
% auskommentieren: 
\typeout{\punktnummer\space ist\space ein\space Duplikat!}%
\xdef\punktnummer{} %macht mehrfache Nummern einfach unsichtbar
%\pgfkeysalso{/tikz/anchor=\anker} % geht auch nicht
\else
\xdef\LstPN{\LstPN,\punktnummer}
\fi}}
% ============

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[
table/row sep=newline, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={
Startpkt Endpkt colordata  \\
%0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
1 3 \\% Ab hier wird überschrieben
1 2  \\
},
%
% Beschriftung
visualization depends on={value \thisrowno{0} \as \punktnummer},
visualization depends on={value \thisrowno{3} \as \anker},
every node near coord/.append style={
%anchor=\anker,
/pgfplots/avoid dupes,% Methode für Mehrfachplatzierung anwenden
},
nodes near coords={\punktnummer, \anker},
% Geht nicht
nodes near coords style={
anchor=\anker
},
]
% Koordinatentabelle
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  Testposition\\
0 0 0     south        \\  % 0. Aliaspunkt. SOLL:  south als Default
1 1 0                    \\
2 0 1       north       \\ % Ausnahme
3 1 1                      \\ 
};
\end{axis}
\end{tikzpicture}
\end{document}


09/16/2018 07:39 PM
pgfplots (patch / table plot): Mehrfache Beschriftung bei 'nodes near coords' durch 'patch table with point meta'

alt text

Für eine Koordinatentabelle mit 4 Punkten gebe ich folgende Verbindungen an

Öffne in Overleaf
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},

Gehen dabei von einem Punkt mehrere Kanten aus, wird mehrmals eine "Punktnummer" gesetzt durch

Öffne in Overleaf
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\punktnummer}

Mit Hilfe dieses Miniprogrammes kann ich mehrfache Elemente aus Liste ausschließen. Aber ich weiß nicht wie ich das bei nodes near coords reinbastle. BTW: Falls jmd. ein solches Listenprüfprogramm mit pgfmath (\pgfmathsetmacro{*}{x ? y : z}), also ohne ifx usw., umzusetzen weiß wäre das natürlich gut.

alt text

Öffne in Overleaf
\documentclass[margin=5mm]{standalone}
\usepackage{tikz, pgffor, amsmath, amssymb}
\begin{document}

\foreach \t in {1,2,3,...,10}{% natürliche Zahlenfolge
% \pgfmathsetmacro{\u}{0}
\foreach \x in {1,2,2,3,4,5,7}{% zu testende Zahlen
    \ifx \x\t% 
    \global\let\u=\t%
    \fi%
}%
\ifx \u\t%
{\t~}%
\else{}% Leer
\fi%
}
\end{document}


Minimalbeispiel:

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[
table/row sep=newline, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={
Startpkt Endpkt colordata  \\
0 0 \\
1 1 \\
2 2 \\
3 3  \\% Bis hierhin ok....
0 3 \\% Ab hier wird überschrieben
0 2  \\
},
%
% Beschriftung
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\punktnummer}
]
% Koordinatentabelle
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\ 
1 1 0             \\
2 0 1              \\
3 1 1              \\
};
\end{axis}
\end{tikzpicture}

\end{document}


09/10/2018 02:00 PM
pgfplots: Punkte eines plots benennen und in einem anderen plot verwenden

alt text

In einem table-plot

Öffne in Overleaf
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
1 1 3             \\%0
2 0 2              \\%1
...
}

benenne ich die Punkte

Öffne in Overleaf
nodes near coords style={%%
name=p\coordindex,
path picture={%
\coordinate[] (P\coordindex) at (p\coordindex.south);
},%

Wenn ich nun (außerhalb der axis Umgebung) klassisch darauf zurgreife, etwa

Öffne in Overleaf
\draw[brown] (P0) circle[radius=5mm] node[right]{geht};
\draw[brown] (P1) -- (P3) node[midway, right]{geht auch};

ist das kein Problem.

Frage: Wie kann ich die benannten Punkte in einem anderen plot verwenden?

Das hier geht nicht. Ich vermute es ist eine Art protect-Problem oder ähnlich.

Öffne in Overleaf
\addplot[no marks,
nodes near coords={},
%
% Versuch ......
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords style={
path picture={
\draw[red, thick] (P\punktnummer) circle[radius=7mm] node[left]{geht nicht};
}},
]
table[header=true, x expr =0, y expr=0]{
Nr.
3
2
};

Vollständiges MWE:

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usetikzlibrary{angles} 
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis, 
colormap={Kantenfarbe}{color=(gray) color=(gray)},
]

% Zeichnung der Punkte =====================
\addplot+[nodes near coords=\coordindex, 
nodes near coords style={%%
name=p\coordindex,
path picture={%
\coordinate[] (P\coordindex) at (p\coordindex.south);
},%
},%%
]
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
1 1 3             \\%0
2 0 2              \\%1
3 2 2              \\%2
4 2 1              \\%3
};

% Tabellarische Zeichnung von Annotationen =================
\addplot[no marks,
nodes near coords={},
%
% Versuch ......
visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords style={
path picture={
\draw[red, thick] (P\punktnummer) circle[radius=7mm] node[left]{geht nicht};
}},
]
table[header=true, x expr =0, y expr=0]{
Nr.
3
2
};

\end{axis}

% Test 
\draw[brown] (P0) circle[radius=5mm] node[right]{geht};
\draw[brown] (P1) circle[radius=5mm] node[right]{geht};
\draw[brown] (P1) -- (P3) node[midway, right]{geht auch};

\end{tikzpicture}
\end{document}


09/09/2018 04:17 PM
pgfplots (patch plot): Einzeichnung eines Winkels

alt text

Anlehnend an das Handbuchbeispiel für patch plot polygon (pgfplots 1.16, letztes Beispiel vor Abschnitt 5.9.2) habe ich einen patch plot derart manipuliert, dass er nur Kanten, keine Flächen, zeichnet (vertex count=2).

Die Kanten können bequem in der Form

Öffne in Overleaf
patch table with point meta={%
Startpkt Endpkt colordata \\%colordata weglassen
1 2 \\%  
3 2 \\% 
...
}

eingegeben werden.

Nun möchte ich an manche der Punkte, d.h. zwischen manche der Kanten, einen Winkel einzeichnen. Ich habe mich gefragt, ob das evtl. auch durch einen weiteren patch plot ginge.

Besonders elegant wäre also eine Lösung mit einem weiteren patch plot mit

Öffne in Overleaf
patch table with point meta={%
Punkt1 Scheitel Punkt2 Winkelname          colordata \\
3 2 1 a        0\\%  
...
}

Was dann den eingezeichneten Winkel '321' liefert (sofern ich das mit der üblichen Winkelbezeichnung richtig gemacht habe).

Hat vll. jmd. eine Idee, wie das gehen könnte?

MWE:

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis, 
colormap={Kantenfarbe}{color=(gray) color=(gray)},
]

% Zeichnung der Punkte =====================
\addplot+[
mark size=1.125pt, mark options={red}, 
table/row sep=\\, 
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={%
Startpkt Endpkt colordata \\%colordata weglassen
1 2 \\%  
1 1 \\%  
1 2 \\% 
2 3  \\
3 4  \\
}
% Tabelle der Punkte =====================
]
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\%0: 0. Aliaspunkt 
1 1 3             \\%1
2 0 2              \\%2
3 2 2              \\%3
4 2 1              \\%4
};

% Beschriftungen  ============================
\addplot[only marks,
%visualization depends on={value \thisrowno{0} \as \punktnummer},
nodes near coords={\coordindex},
] table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\%0: 0. Aliaspunkt 
1 1 3             \\%1
2 0 2              \\%2
3 2 2              \\%3
4 2 1              \\%4
};

% Zeichnung der Winkel =====================
%....

\end{axis}
\end{tikzpicture}

\end{document}


09/04/2018 03:32 PM
pgfplots: Kein Effekt durch 'point meta'

Beim Handbuchbeispiel PROVIDING COLOR DATA - POINT META scheint die Angabe meta=colordata keinen Effekt zu haben: Alles wird blau gezeichnet.

Wie kann man auf die Metadaten zugereifen?

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis, colorbar, 
]
\addplot+[ultra thick, 
point meta=explicit
]
table[x=xcolname,y=ycolname,
meta=colordata
]
{
xcolname ycolname colordata
0 0 0
1 2 1
2 2 2
3 3 3
};

\fill[color of colormap={0.33}, draw=black] (1,0) rectangle (2,1);
\end{axis}
\end{tikzpicture}

\end{document}


09/03/2018 03:25 PM
pgfplots (patch plot): Verwendung von Farben aus der colormap

Warum werden für eine colormap

Öffne in Overleaf
colormap={mycolormap}{
color(0)=(black); 
color(1)=(blue); 
color(2)=(red); 
color(3)=(orange); 
%color(10)=(black)   % 
},

trotz der Einstellung

Öffne in Overleaf
colormap access= piecewise constant

die Farben nicht scharf getroffen? Bei red und orange sieht man Abweichungen.

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\pgfplotsset{
colormap access=
% map
%direct
piecewise constant
%piecewise linear
}

%  /pgfplots/colormap access=mapjdirectjpiecewise constantjpiecewise linear

\begin{tikzpicture}
\begin{axis}[hide axis, colorbar, 
% Versuch 1: 
%colormap={test}%
%    {
%        [0.1cm] % colormap steps: 1cm
%        color(0cm)=(black);           color(0.1cm)=(black);   
%        color(0.1cm)=(blue);          color(1.1cm)=(blue);  
%       color(1.1cm)=(red);        color(2.1cm)=(red);
%       color(2.1cm)=(orange);        color(3.1cm)=(orange);
% %       color(4)=(orange);        color(12)=(black);
%    }
% Versuch 2:
colormap={mycolormap}{
color(0)=(black); 
color(1)=(blue); 
color(2)=(red); 
color(3)=(orange); 
%color(10)=(black)   % 
},
point meta min=0, point meta max=3,
%point meta = explicit symbolic, 
mesh/color input=colormap
]
\addplot+[
ultra thick, 
% Punkte
mark size=1.125pt, mark options={red}, 
table/row sep=\\, % Muss wohl so sein!?
%
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={%
Startpkt Endpkt colordata \\%
1 2 0\\%  Default; SOLL: black
1 7 1\\%  SOLL: blue
2 4  2\\% SOLL: red
3 4  3\\% SOLL: orange
4 6  0\\% SOLL: black
5 4  \\% 
5 7 \\%
6 4  \\%
6 7 \\%
7 7 \\%
8 8 \\%
}
% Angabe der Koordinaten =====================
]
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\%0
1 2 2             \\%1
2 0 1              \\%2
3 0 0              \\%3
4 1 0             \\%4
5 2 0            \\%5
6 2 0     \\%6   
7 1 1     \\%7   
8 0 2             \\%8
};

% Beschriftungen  ============================
% Laut Handbuch   "replicate the vertex list to show \coordindex"

% Anzeigen des 0. Aliaspunktes verhindern:
\newcommand\Punktnummer{\pgfmathparse{\punktnummer>0 ? \punktnummer : ""}\pgfmathresult}

\addplot[only marks,
visualization depends on={value \thisrowno{0} \as \punktnummer},
visualization depends on={value \thisrowno{3} \as \Anker},
nodes near coords={\Punktnummer},
%
every node near coord/.append style={
font=\sffamily\scriptsize,
text=black,
anchor=\Anker
},
] table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y Textposition \\
0 0 0  south   \\%0: 0. Aliaspunkt & south als Default für Standardposition 
1 2 2             \\%1
2 0 1              \\%2
3 0 0              \\%3
4 1 0             \\%4
5 2 0            \\%5
6 2 0  north   \\%6  Geänderte Textposition
7 1 1  south   \\%7  Default wiederholen
8 0 2             \\%8
};
% Beschriftungen  ============================

\end{axis}
\end{tikzpicture}

\end{document}


09/01/2018 02:28 PM
pgfplots: Umgang mit der colormap - Erstellen einer colormap

alt text

Wie kann ich eine colormap z.B. so einstellen, dass 0 = schwarz, 1 = blau, 2 = rot bedeutet, vorzugsweise mit Farbnamen, also etwa red, nicht rgb() usw.

Mit \pgfplotscolormapdefinemappedcolor{#1} greift man scheints auf die colormap zu, aber wie erstelle ich eine colormap zielführend?

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{colormaps}
\pgfplotsset{compat=1.12}

\tikzset{Farbe/.style={/utils/exec={\pgfplotscolormapdefinemappedcolor{#1}},
draw=black, fill=mapped color}
}

\begin{document}

\begin{tikzpicture}
\begin{axis}[
% Geht nicht
%colormap={test}{color(0cm)=(red); color(1cm)=(blue);  color(2cm)=(red);}
% Alles schwarz
colormap={test}{color=(black) color=(red)},
% 
%colormap/hsv,
hide axis,axis equal,
xmin=-2.5, xmax=5,
ymin=-.5, ymax=.5,
]
\draw[Farbe=0, xshift=-2cm] (0,0) rectangle (1,1);
\draw[Farbe=1] (0,0) rectangle (1,1);
\draw[Farbe=2, xshift=2cm] (0,0) rectangle (1,1) node[right]{IST};

\draw[fill=black, xshift=-2cm, yshift=-2cm] (0,0) rectangle (1,1);
\draw[fill=blue, yshift=-2cm] (0,0) rectangle (1,1);
\draw[fill=red, xshift=2cm, yshift=-2cm] (0,0) rectangle (1,1) node[right]{SOLL};
\end{axis}
\end{tikzpicture}

\end{document}


09/01/2018 12:14 PM
pgfplots (patch plot): Einstellen bzw. Umgang mit der colormap bei 'patch table with point meta'

Auch hier gefragt: https://matheplanet.de/matheplanet/nuke/html/viewtopic.php?topic=237514&post_id=1728148


Wie muss ich die colormap

Öffne in Overleaf
 colormap={test}%
    {
        [0.1cm] % colormap steps: 1cm
        color(0cm)=(black);           color(1cm)=(black);   
        color(1cm)=(blue);          color(2cm)=(blue);  
        color(2cm)=(red);        color(3cm)=(red);
        color(3cm)=(orange);        color(3cm)=(orange);
    }

einstellen, so dass ich später in einer meta-Daten-table mit der Wahl

Öffne in Overleaf
Startpkt Endpkt colordata \\%
1 2 0\\%  SOLL: genau schwarz!
1 1 1\\%  SOLL: genau blau!
1 7 2\\%  SOLL: genau rot!
2 4  3\\% SOLL: genau orange!

erhalte?

Das MWE gerät hier etwas länger, da man die Beschriftungen der Punkte durch einen Zusatzplot ergänzen muss (Handbuchbeispiel pgfplots 1.16, letztes Beispiel vor Abschnitt 5.9.2).

alt text

Öffne in Overleaf
\documentclass[margin=5mm, tikz]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{patchplots}
\pgfplotsset{compat=1.13}

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis, colorbar, 
 colormap={test}%
    {
        [0.1cm] % colormap steps: 1cm
        color(0cm)=(black);           color(1cm)=(black);   
        color(1cm)=(blue);          color(2cm)=(blue);  
        color(2cm)=(red);        color(3cm)=(red);
        color(3cm)=(orange);        color(3cm)=(orange);
    }
]
\addplot+[
ultra thick, 
% Punkte
mark size=1.125pt, mark options={red}, 
table/row sep=\\, % Muss wohl so sein!?
%
patch, % Plot-Typ
patch type=polygon,
vertex count=2, % damit nur Kanten, keine Flächen, gezeichnet werden
%
% Angabe der Verbindungskanten =====================
patch table with point meta={%
Startpkt Endpkt colordata \\%
1 2 0\\%  SOLL: genau schwarz!
1 1 1\\%  SOLL: genau blau!
1 7 2\\%  SOLL: genau rot!
2 4  3\\% SOLL: genau orange!
3 4  4\\%
4 6  0\\%
5 4  \\% 
5 7 \\%
6 4  \\%
6 7 \\%
7 7 \\%
8 8 \\%
}
% Angabe der Koordinaten =====================
]
table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y  \\
0 0 0     \\%0
1 2 2             \\%1
2 0 1              \\%2
3 0 0              \\%3
4 1 0             \\%4
5 2 0            \\%5
6 2 0     \\%6   
7 1 1     \\%7   
8 0 2             \\%8
};

% Beschriftungen  ============================
% Laut Handbuch   "replicate the vertex list to show \coordindex"

% Anzeigen des 0. Aliaspunktes verhindern:
\newcommand\Punktnummer{\pgfmathparse{\punktnummer>0 ? \punktnummer : ""}\pgfmathresult}

\addplot[only marks,
visualization depends on={value \thisrowno{0} \as \punktnummer},
visualization depends on={value \thisrowno{3} \as \Anker},
nodes near coords={\Punktnummer},
%
every node near coord/.append style={
font=\sffamily\scriptsize,
text=black,
anchor=\Anker
},
] table[header=true, x index=1, y index=2, row sep=\\] {
Nr x y Textposition \\
0 0 0  south   \\%0: 0. Aliaspunkt & south als Default für Standardposition 
1 2 2             \\%1
2 0 1              \\%2
3 0 0              \\%3
4 1 0             \\%4
5 2 0            \\%5
6 2 0  north   \\%6  Geänderte Textposition
7 1 1  south   \\%7  Default wiederholen
8 0 2             \\%8
};
% Beschriftungen  ============================

\end{axis}
\end{tikzpicture}

\end{document}


08/31/2018 05:51 PM
Pgfplots X-Achse mit Dezimalzahlen skalieren

Hallo Community,

ich habe folgendes Problem mit der Beschriftung meiner X-Achse. Ich möchte, dass die Zahlenwerte ohne Exponenten ausgeschrieben werden. Also ganz normal mit Komma.

alt text

Bedeutet: 0,01 0,02 etc. Ich schätze, dass die Lösung ganz einfach sein wird. Leider komme ich nicht drauf. Ich habe heute den halben Tag recherchiert. Der einzige Hinweis, den precision=2 zu verwenden, hat nicht geholfen.

Ich hoffe, ihr könnt mir da helfen.

Schönes WE

Ö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]
\centering
\begin{tikzpicture}
  \begin{axis}[ height=7.9cm, width=7.9cm, grid=major, 
  xlabel={X-Achse}, 
  ylabel={Y-Achse  },
  xmin=0.01, xmax=0.06,
  ymin=0, ymax=200,
  xtick={0.02,0.03,0.04,0.05},
  xticklabel style={/pgf/number format/precision=3},
    scaled ticks=false, 
  /pgf/number format/.cd,
    use comma,
    1000 sep={},
  ytick={0,40,80,120,160,200},
  legend style={at={(1,1)},xshift=0.2cm,anchor=north west,nodes=right}]

    \addplot  [mark=none, color=blue1] coordinates {
        (0.02, 28)
        (0.05, 48)

      };\addlegendentry{$4$}

      \addplot [mark=none, color=grey] coordinates {  
       (0.02, 24)
        (0.05, 34)

      };\addlegendentry{ $3$}
       \addplot [mark=none,color=purpil] coordinates {  
        (0.02, 80)
        (0.05, 174)

        };\addlegendentry{ $2$}
      \addplot[mark=none,color=orange] coordinates {  
        (0.02, 60)
        (0.05, 113)

      };\addlegendentry{ $1$}
  \end{axis}
  \end{tikzpicture}
  \caption{Caption}
\label{HEae}
  \end{figure}
\end{document}


08/30/2018 01:34 PM
pgfplots doppelte X-Achsenbeschriftung untereinander

Hallo, ich möchte das folgende untere Diagramm für meine Thesis aus Minitab in Latex erstellen. Bisher habe ich nichts gefunden, das mir erklärt wie ich

  1. eine wiederkehrende Achsenbeschriftung realisiere (vf)
  2. Zwei Wertebereiche für die X-Achse definiere.

Ich habe mal ein Roh-Diagramm erstellt, welches hoffentlich eine Ausgangsbasis schafft.

Wäre super, wenn mir einer helfen könnte.

SOLL:

alt text

IST:

alt text

Öffne in Overleaf
\documentclass[chapterprefix=true, 12pt, a4paper, oneside, parskip=half,
listof=totoc, bibliography=totoc,
numbers=noendperiod]{scrbook}
\usepackage{pgfplots}
\usepackage{tikz}

\begin{document} % ergänzt

\begin{figure}[ht]
\begin{tikzpicture}
  \begin{axis}[ height=7.9cm, width=7.9cm, grid=major, 
  xlabel={$v_{f}$ [$\frac{mm}{min}$]}, 
  ylabel={$b_{f}$ [$\mu$m]},
  xmin=0, xmax=20000,
  ymin=0, ymax=160,
  xtick={1000,20000},
  scaled ticks=false, 
  /pgf/number format/.cd,
    use comma,
    1000 sep={},
  ytick={0,20,40,60,80,100,120,140,160},
  legend style={at={(1,1)},xshift=0.2cm,anchor=north west,nodes=right}]

  \addplot [only marks, mark=square*,blue] coordinates {
    (1000,   10) 
    (1000,   21)  
    (1000,   28)  
    (1000,   45) 
    };\addlegendentry{1000}

    \addplot [only marks, mark=square*,red] coordinates {
    (20000,   12) 
    (20000,   56)  
    (20000,   66)  
    (20000,   148) 
    };\addlegendentry{20000}  
      \end{axis}
  \end{tikzpicture}
  \caption{test}
  \end{figure}
\end{document}