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

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}


08/29/2018 08:20 PM
Wie zeichne ich einen Streichholzgraphen?

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Ich beantworte die Frage auch selbst.

Antworten im Sinne von Verbesserungs- und Vereinfachungsvorschlägen sind sind jedoch sehr willkommen!


alt text

Die Abbildungen zeigen sogen. Streichholzgraphen.

Hierbei gibt es drei Herausforderungen:

  1. Die Platzierung der Punkte (hier als vorhandener externer Datensatz angenommen)
  2. Die Angabe der Verbindungskanten
  3. Die geeignete Platzierung der Beschriftungen (keine Überlappungen o.ä.)


08/29/2018 01:14 PM
pgfplots: Nicht wünschenswertes Verhalten von 'visualization depends on'

Wenn ich eine Tabelle

Öffne in Overleaf
table[header=true, row sep=\\] {
x y Text           \\
0 2 bleibt              \\%0
2 2                     \\%1
0 1                   \\%2
0 0 bleibt.auch             \\%3
1 0                   \\%4
2 0               \\%5
2 0                 \\%
1 1                  \\%7
};

plotte, dann muss

  1. in der obersten Zeile ein Wert angebeben werden (sonst Fehlermeldung);
  2. dieser Wert wird dann auch für in der 'Text-Spalte' leere Zeilen übernommen (solange bis dort etwas neues steht, dann wird dieser Wert übernommen)

Frage: Was kann ich tun, damit visualization depends on={value \thisrowno{2} \as \Text} nur dann etwas liefert, wenn in \thisrowno{2} auch ein Eintrag steht, sonst leer bleibt?

alt text

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

\begin{document}

\begin{tikzpicture}
\begin{axis}[hide axis]
\addplot+[only marks,
visualization depends on={value \thisrowno{2} \as \Text},
nodes near coords={\coordindex ~Text: \Text},
every node near coord/.append style={font=\scriptsize}
]
table[header=true, row sep=\\] {
x y Text           \\
0 2 bleibt              \\%0
2 2                     \\%1
0 1                   \\%2
0 0 bleibt.auch             \\%3
1 0                   \\%4
2 0               \\%5
2 0                 \\%
1 1                  \\%7
};
\end{axis}
\end{tikzpicture}

\end{document}


08/28/2018 05:16 PM
pgfplots (patch plot): Umständliches Ergänzen von Bezeichnungen (nodes near coords)

alt text

Angelehnt an das Handbuch pgfplots 1.16, letzte Beispiel vor Abschnitt 5.9.2. habe hier eine Wertetabelle

Öffne in Overleaf
Nr. x y \\
0 0 2 \\%0
1 2 2 \\%1
2 0 1 \\%2
3 0 0 \\%3
...

in der ich in einem umfunktionierten patch plot die Verbindungslinien Zeichne

Öffne in Overleaf
patch table with point meta={%
Startpkt Endpkt colordata \\%colordata weglassen, dann vermutl. autom. 0
1 2 \\% 
1 0 \\
1 7 \\
2 4  \\
....
7 7 \\ % Kein Strich
}

Frage: Warum muss ich hierbei, wie im Handbuch die Beschriftungen durch einen Extraplot ergänzen und kann dies nicht im 1. eigentlichen Plot machen?

Öffne in Overleaf
% replicate the vertex list to show \coordindex:
\addplot[only marks,    nodes near coords=\coordindex, ]
table[row sep=\\] {
0 2 \\%0
2 2 \\%1
.....
1 1 \\%7
};

Wenig Hoffnung auf eine AW, wenn das bereits im Handbuch so gemacht wird, aber vll. hat ja jmd. eine Idee.

Vollständiges MWE:

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

\begin{document}

\begin{tikzpicture}
\begin{axis}[
colormap={Kantenfarbe}{color=(gray) color=(gray)},
]
\addplot+[
% Punkte
mark size=1.125pt, mark options={red}, 
% Kanten
thick, 
% Beschriftung
% visualization depends on={{aaa}  \as \test},
%nodes near coords=\coordindex, % TUT -hier- NICHT ?!
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 \\%colordata weglassen, dann vermutl. autom. 0
1 2 \\% 
1 0 \\
1 7 \\
2 4  \\
3 4  \\
4 6  \\
5 4  \\
6 4 \\
7 7 \\ % Kein Strich
}
]
table[header=true, x index=1, y index=2] {
Nr. x y \\
0 0 2 \\%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
};
% replicate the vertex list to show \coordindex:
\addplot[only marks,
nodes near coords=\coordindex,
every node near coord/.append style={
%text=blue
},
]
table[header=true, x index=1, y index=2] {
Nr. x y \\
0 0 2 \\%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
};
\end{axis}
\end{tikzpicture}

\end{document}


08/28/2018 10:48 AM
pgfplots: Änderung des Defaults für den Startpunkt des \coordindex zu 1, statt 0

Im Handbuch heißt es

Öffne in Overleaf
\coordindex
Yields the current index of the table row (starting with 0). This does not count header or comment     lines.

Will man den Startpunkt bei 1 haben, bedient man sich, je nach Anwendung, des Tricks, \coordindex+1.

Ich habe mich gefragt, ob man auch global die Zählung bei 1 starten lassen kann.

Willkürliches MWE:

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

\begin{document}

\begin{tikzpicture}
\begin{axis}[]
\addplot+[only marks,
nodes near coords=\coordindex,
]
table[row sep=\\] {
0 2 \\%0 
2 2 \\%1
0 1 \\%2
0 0 \\%3
1 0 \\%4
2 0 \\%5
2 0 \\%6
1 1 \\%7
};
\end{axis}
\end{tikzpicture}

\end{document}


08/28/2018 10:41 AM
pgfplots: Einzelanpassung von 'nodes near coords'

neu/überarbeitet

alt text

Im Graph sieht man, dass '5' und '6' übereinanderliegen.

Um die Beschriftung anzupassen, dürfte es am einfachsten es sein, in der Koordinatentabelle eine Spalte mit Positionsangaben zu ergänzen; etwa

Öffne in Overleaf
x y Textposition \\
0 2 south\\%0 % Hier muss ein Default stehen :(
2 2 \\%1
0 1 \\%2
0 0 \\%3
1 0 \\%4
2 0  \\%5
2 0  north \\%6 Überschreibt alle folgenden Anker! :(
1 1 \\%7

und dafür

Öffne in Overleaf
visualization depends on={value \thisrowno{2} \as \Anker},
 every node near coord/.append style={text=black,
anchor=\Anker
},

Allerdings bekomme ich hier zwei Probleme:

  1. Im der allerersten muss ein Default angegeben werden.

  2. Wird zwischendrin geändert, werden alle folgenden Positionsangeben überschrieben.

Was kann ich da machen? Also einen Default global festlegen, der nur lokal geändert wird?

Öffne in Overleaf
% every node near coord/.default={text=black, anchor=south}, % tut nicht

alt text

MWE:

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

\begin{document}

\begin{tikzpicture}
\begin{axis}[]
\addplot+[only marks,
nodes near coords=\coordindex,
visualization depends on={value \thisrowno{2} \as \Anker},
% Tut 
every node near coord/.append style={text=black,
anchor=\Anker
},
% every node near coord/.default={text=black, anchor=south}, % tut nicht
]
table[header=true, row sep=\\] {
x y Textposition \\
0 2 south\\%0 % Hier muss ein Default stehen
2 2 \\%1
0 1 \\%2
0 0 \\%3
1 0 \\%4
2 0  \\%5
2 0  north \\%6 Überschreibt alle folgenden 
1 1 \\%7
};
\end{axis}
\end{tikzpicture}

\end{document}


08/27/2018 11:33 AM
pgfplots (tableplot): Optimierung des Zeichnens von Verbindungslinien

alt text

Ich habe hier Punktkoordinaten

Öffne in Overleaf
Nr. x   y
0 -1.23 4.58     
1 -1.23 4.58 
2 -2.01 3.95 
3 -1.07 3.59 
4 -1.85 2.96 
5 -2.78 3.32

(Die oberste Zeile enthält Fantasiewerte, da pgfplots von 0 an zählt.)

Diese versehe ich mit Namen P-1, P-2, .... durch every node near coord/.append style={name=#1-\coordindex}

Und zeichne später Verbindungslinien mit Schleifen:

Öffne in Overleaf
\foreach \n in {2,3} \draw (P-1) -- (P-\n);
\foreach \n in {1} \draw (P-2) -- (P-\n);
.....

(Die nodes near coords muss ich dann leer lassen und auch mit Schleifen benennen, da sonst die Striche zu den nodes, nicht zu den Punkten gehen)

Das kann bei 100 Koordinatenpaaren 100 Schleifen bedeuten. Hat jmd. vielleicht eine Idee, wie man das zusammenfassen kann?

Günstig wäre ein Tabelle des Typs:

Öffne in Overleaf
Nr. x   y          Verbindungspunkte Nr.
0 -1.23 4.58     
1 -1.23 4.58       2  3
2 -2.01 3.95       1
3 -1.07 3.59       3  2  4
4 -1.85 2.96       4  2  3
5 -2.78 3.32       4  2  3

Vollständiges MWE:

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

\pgfplotsset{compat=1.13,
name nodes near coords/.style={
every node near coord/.append style={
name=#1-\coordindex,
inner sep=0pt, outer sep=0.5pt,
}}}

\begin{document}

\begin{tikzpicture}[]

\begin{axis}[hide axis,
x =15mm, y=15mm,
nodes near coords,
]

% Punkte
\addplot+ [name nodes near coords=P,
nodes near coords={\coordindex}, % Leere node setzen
only marks,
mark size=1.125pt,
] table[header=false, x index=1, y index=2] {%
0 -1.23 4.58
1 -1.23 4.58
2 -2.01 3.95
3 -1.07 3.59
4 -1.85 2.96
5 -2.78 3.32
};
\end{axis}

% Zeichnen der Linienzüge
\foreach \n in {2,3} \draw (P-1) -- (P-\n);
\foreach \n in {1} \draw (P-2) -- (P-\n);
\foreach \n in {3,2,4} \draw (P-3) -- (P-\n);
\foreach \n in {4,2,3} \draw (P-4) -- (P-\n);
\foreach \n in {4,2,3} \draw (P-5) -- (P-\n);

\end{tikzpicture}

\end{document}


08/26/2018 12:42 PM
pgfplots (tableplot): Verbinden von Koordinaten in vorgegebener Reihenfolge

alt text

Ich habe hier eine Tabelle mit Punktkoordinaten.

Öffne in Overleaf
1 0.00    3.60
2 1.00    3.60
3 1.50    4.47

Frage: Wenn ich später die Punkte in irgendeiner Reihenfolge verbinden will, z.B. 1-3-2, wie mache ich das am besten?

Ich habe

visualization depends on={value \thisrowno{0} \as \Label}, every node near coord/.append style={name={P-\Label}}

und dann \draw[] (P-1) -- (P-3);

versucht, das klappte nicht; ist auch vermutlich nicht 100%ig optimal, da so die nodes, nicht die Koordinaten, verbunden würden.

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

\usepackage{pgfplots}

\begin{document}

\begin{tikzpicture}%[scale=1.875]
\begin{axis}[
hide axis,
x = 15mm, y=15mm
]

\addplot+ [only marks, 
mark options={red},
mark size=1.125pt, 
% Bezeichnung
font=\scriptsize\ttfamily, % \tiny %  \scriptsize
visualization depends on={value \thisrowno{0} \as \Label},
nodes near coords={\Label},
every node near coord/.append style={text=black},
] 
table[x index=1, y index=2] {% 
1 0.00    3.60
2 1.00    3.60
3 1.50    4.47
}; 
\end{axis} 
\end{tikzpicture}

\end{document}


08/13/2018 07:07 PM
pgfplots: Unterschied \addplot [...] coordinates bzw. table???

Ich habe bei mrunix eine Frage gestellt, bin mir aber unsicher, welches das aktivere Forum ist. Daher hier zusätzlich der Post, natürlich auch dann später mit der Verlinkung hoffentlich erfolgreicher Antworten.

https://www.mrunix.de/forums/showthread.php?77374-pgfplots-Unterschied-addplot-coordinates-bzw-table

Ich versuche gerade zu verstehen, wo der Unterschied bei pgfplots ist bei der Dateneingabe zwischen:

Öffne in Overleaf
\addplot [Optionen] coordinates {Punkte};

und

Öffne in Overleaf
\addplot table [Optionen] {\mytable};

Bei der ersten Variante kann ich Marker, Line style etc. in den Optionen setzen, bei der zweiten Variante bleibt dies wirkungslos.

Was mache ich für einen Fehler???

Öffne in Overleaf
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}[baseline]%
  \pgfplotstableread{%
    x y1    y2
    0   0.8 1   
    0.1 1.7 2  
    0.2 2.4 2  
    0.3 5   4  
    0.4 0   1  
    0.5 -1  6  
    0.6 0   7  
  }\mytable%
  \begin{axis}[%
    xlabel={xlabel},%
    ylabel={ylabel},%
  ]%

    % HIER FUNKTIONIERT ALLES PRIMA:
    \addplot+ [x=x,y=y1,
      smooth,
      no marks,
      solid,
      line join = round,
    ]
    coordinates {(0,0.8) (0.1,1.7) (0.2,2.4) (0.3,5) (0.4,0) (0.5,-1) (0.6,0)};

    % HIER WERDEN DIE OPTIONEN IN ADDPLOT IGNORIERT:
    \addplot+ table [x=x,y=y2,
      smooth,
      no marks,
      dashed,
      line join=round,
    ] {\mytable};
  \end{axis}
\end{tikzpicture}
\end{document}


08/12/2018 09:36 PM
Fläche unter Funktionskurve,die rechts und links geöffnet ist, in einem bestimmten Abschnitt füllen

Hallo!

Ich bin noch relativ neu mit Latex und besonders mit pgfplots unterwegs und habe hier ein kleines Problem, für das ich bei anderen,ähnlichen Fragen noch keine Lösung gefunden habe.

alt text

Öffne in Overleaf
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween} 
\pgfplotsset{compat=1.10}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture} 
\begin{axis}[axis lines=middle,xlabel=$x$,ylabel=$y$,
    xtick=\empty,ytick=\empty,enlargelimits=0.05,grid,domain=-2:2,no marks]

\addplot[name path=P,green]{3^x};

\draw[blue,very thin](250,800)node[above]{$a$}--(250,-10);
\draw[blue,very thin](350,800)node[above]{$b$}--(350,-10);

\end{axis}

\end{tikzpicture}

\end{document}

Ich habe mir diesen Abschnitt kurz aus meinem Dokument rausgeholt, um es kurz zu halten. Die Achsenbeschriftung ist mir in diesem Fall vollkommen egal.

Jedenfalls frage ich mich, wie man das mit pgfplots macht, dass unter der Kurve (y=3^x) die Fläche im Bereich zwischen a und b gefüllt wird.

Eine kleine technische Frage habe ich auch noch. Ich habe hier ein Koordinatensystem, in dem die Maße nicht ganz so passend sind. Die y-Achse im Bild ist im Code erst bei x=200 oder so. Wie kann man das noch einstellen, dass die y-Achse auch im Code bei x=0 ist?

Vielen Dank für die Hilfe!

LG Lilanarus


07/02/2018 04:15 PM
pgfplots: 3D-Parameterfunktion mit zwei Veränderlichen zeichnen

Kann man die Funktion

M={(cosh(u)cos(v);cosh(u)sin(v);u)}: (u,-R,R), R>0, (v,-pi,pi)}

mit pgfplots schön darstellen?

Laut Sage

Öffne in Overleaf
u, v = var('u,v')
parametric_plot3d((cosh(u)*sin(v), cosh(u)*cos(v), u), (u,-1,1), (v,-pi,pi),  mesh=True, opacity=0.5, plot_points=[20,20])

sieht die Funktion so aus:

alt text

Mit dem MWE bekomme ich nichts Gescheites hin:

Öffne in Overleaf
\documentclass[margin=2mm, tikz]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}
\begin{tikzpicture}
   \begin{axis}[view={60}{30},
                axis lines=center,axis on top,
                xlabel=$x$,ylabel=$y$,zlabel=$z$,
                xtick={2},ytick={2},ztick={2},
                no marks,axis equal,
                xmin=-4,xmax=4,ymin=-4,ymax=4,zmin=-1,zmax=4,
                enlargelimits={upper=0.1}]
\addplot3+[
no markers,
samples=51, 
samples y=0,
domain=-pi:pi,
variable=\v]
(
 {cosh(1)*cos(\v r)},
 {cosh(1)*sin(\v r)},
 {\v}
);
\end{axis}
\end{tikzpicture}

\end{document}

alt text


06/06/2018 11:47 AM
Verwendung von CSV-Daten mit Komma als Spaltentrenner zwischen String-Daten

Unter »pgfplots: x-Achse mit Strings« habe ich ein Problem mit String-Daten für die x-Achse geschildert, das ich mit Hilfe von »pgfplots using strings from data table as x axis labels in bar chart« lösen konnte:

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage[normalem]{ulem} 
\usepackage{tikz} 
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot} 
\usepackage{subcaption}
\usepackage{filecontents}
\begin{filecontents}{datensuperfein.dat}
    x,y   
    ETD 29/16/10,9.60
    ETD 34/17/11,13.21
    ETD 39/20/13,19.92
    ETD 44/22/15,29.96
    ETD 49/25/16,40.34
    PQ 20/20,5.80
    PQ 26/20,10.15
    PQ 26/25,12.47
    PQ 32/20,14.43
    PQ 32/30,21.37
\end{filecontents}

\pgfplotstableread[col sep=comma]{datensuperfein.dat}\datatable
\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
    }
}

\begin{document}

\begin{figure}
    \centering
    \begin{tikzpicture}
        \begin{axis}[
            ybar, ymin=0,
            xlabel=Xstuff,
            ylabel=Value,
            flexible xticklabels from table={datensuperfein.dat}{x}{col sep=comma},
            xticklabel style={text height=1.5ex}, % To make sure the text labels are nicely aligned
            xtick=data,
            nodes near coords,
            nodes near coords align={vertical}]
            \addplot table[x expr=\coordindex,y=y]{\datatable};
        \end{axis}
    \end{tikzpicture}
    \caption{Caption}
\end{figure}
\end{document}

Dazu nur ein paar Fragen:

Ich verstehe nicht so ganz, warum

Öffne in Overleaf
\pgfplotstableread[col sep=comma]{datensuperfein.dat}\datatable

bereits in der Präambel geladen werden muss. Das erscheint mir etwas unlogisch, gehört das doch eigentlich nur zu einem einzigen Graphen. Was, wenn ich jetzt mehrere Graphen erstelle, mit unterschiedlichen x-Labels, müssen die Einstellungen alle in die Präambel? Gibt es eine Möglichkeit, alle relevanten Einstellung direkt in zwischen \begin{tikzpicture} und \end{tikzpicture} einzubinden um eine gewissen Übersichtlichkeit zu wahren (sprich diese Einstellung gehört exakt zu diesem einen Graph)?


06/06/2018 11:07 AM
pgfplots: x-Achse mit Strings

Ich versuche gerade ein Säulendiagramm zu erstellen. Die gesamte x-Achse besteht dabei aus Strings (Namen von magn. Kernen). Die y-Achse enthält das Volumen (float).

Wie sage ich pgfplots, dass die x-Achse mit dem String "ETD 29/" usw. beschriftet werden soll?

Später soll das in eine CSV Datei stehen. Wie muss die CSV aussehen? Bisher sieht sie so aus:

Öffne in Overleaf
x,y
ETD 29/16/10,9.60
ETD 34/17/11,13.21
ETD 39/20/13,19.92
ETD 44/22/15,29.96
ETD 49/25/16,40.34
PQ 20/20,5.80
PQ 26/20,10.15
PQ 26/25,12.47
PQ 32/20,14.43
PQ 32/30,21.37

Muss ich dann pgfplot sagen, dass die Trennung mit einem Komma erfolgt?

Hier das Minimalbeispiel für das "String-Problem":

Öffne in Overleaf
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage[normalem]{ulem} 
\usepackage{tikz} 
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usepgfplotslibrary{dateplot} 
\usepackage{subcaption}
\usepackage{filecontents}
\begin{filecontents}{datensuperfein.dat}
x   y   
ETD 29/16/10    9.60
ETD 34/17/11    13.21
ETD 39/20/13    19.92
ETD 44/22/15    29.96
ETD 49/25/16    40.34
PQ 20/20    5.80
PQ 26/20    10.15
PQ 26/25    12.47
PQ 32/20    14.43
PQ 32/30    21.37
\end{filecontents}

\begin{document}

\begin{figure}
  \centering
\begin{tikzpicture}
\begin{axis}[
%width=\linewidth, % Scale the plot to \linewidth
grid=major, % Display a grid
grid style={dashed,gray!30}, % Set the style
xlabel=X Axis,
ylabel=Y Axis,
legend style={at={(0.5,-0.2)},anchor=north}, % Put the legend below the plot
x tick label style={rotate=90,anchor=east} % Display labels sideways
]
\addplot+[ybar] table [x index=0, y expr=\thisrowno{1}] {datensuperfein.dat}; 
\legend{Plot}
\end{axis}
\end{tikzpicture}
  \caption{Caption}
\end{figure}
\end{document}


05/15/2018 04:33 PM
errorBars definieren

alt text

Ich will auf meinem Diagramm errorBars definieren, aber weiß ich nicht, wie ich es machen soll! Kann vielleicht jemand mir helfen?

Öffne in Overleaf
\definecolor{bblack}{HTML}{363033}
\definecolor{rred}{HTML}{9f1147}
\definecolor{ggreen}{HTML}{356a58}
\begin{figure}[H]
\begin{tikzpicture}
\begin{axis}[
width  = 1*\textwidth,
height = 8cm,
major x tick style = transparent,
ybar=2*\pgflinewidth,
bar width=20pt,
ymajorgrids = true,
%   ylabel = {s},
symbolic x coords={tensile strength (MPa),tensile modulus (GPa),ILSS (MPa),flexural strength (MPa),flexural modulus (GPa)},
xtick = data,
x tick label style={rotate=45},  
nodes near coords,
nodes near coords align={vertical},
scaled y ticks = false,
enlarge x limits=0.15,
ymin=0,
legend cell align=left,
legend style={
    at={(1,1.05)},
    anchor=south east,
    column sep=1ex
}
]
\addplot[style={bblack,fill=bblack,mark=none}]
coordinates {(tensile strength (MPa),1022) (tensile modulus (GPa),117) (ILSS (MPa),69) (flexural strength (MPa),1026) (flexural modulus (GPa),110)};

\addplot[style={rred,fill=rred,mark=none}]
coordinates {(tensile strength (MPa),888) (tensile modulus (GPa),114) (ILSS (MPa),60) (flexural strength (MPa),887) (flexural modulus (GPa),106)};

\addplot[style={ggreen,fill=ggreen,mark=none}]
coordinates {(tensile strength (MPa),1000) (tensile modulus (GPa),125) (ILSS (MPa),66) (flexural strength (MPa),1015) (flexural modulus (GPa),112)};

\legend{laminate without gaps,laminate with gaps,Laminate with printed CFRP-UD}
\end{axis}
\end{tikzpicture}
\caption{Comparison of the mechanical properties of the laminates}
\label{material-properties}
\end{figure}


05/02/2018 08:33 PM
pgfplots / Trigonometrische Kurve: Wie kann ich die x-Achse mit beliebigen Pi-Faktoren automatisch skalieren?

Die Frage ist zum Archivieren gedacht, kein Support benötigt. Antworten sind jedoch gern gesehen und sehr willkommen! Ich beantworte die Frage auch selbst.


alt text

Etwa bei trigonometrischen Kurven wünscht man oft eine Achsenskalierung mit Pi-Faktoren.

Meistens werden Pi-Ganze, Pi-Halbe oder Pi-Viertel Unterteilungen gewählt, das heißt "Unterteilungstiefe" 1 bzw. 2 bzw. 4.

Günstig wäre also ein Code, der eine beliebige Unterteilungstiefe erlaubt (also z.B. auch Skalierung mit Pi-Siebtel Faktoren) und dabei folgenden Darstellungskriterien genügt:

alt text

Wie kann man das umsetzen?


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}