alt text

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

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

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

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

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

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

\begin{document}

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

\end{document}

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

alt text

gefragt 14 Feb '18, 01:58

cis's gravatar image

cis
9.5k95459491
Akzeptiert-Rate: 29%

bearbeitet 14 Feb '18, 02:06

Schon einmal überlegt, mit xticklabel einen Befehl anzugeben, der entweder aus \tick oder \ticknum die gewünschte Ausgabe direkt berechnet? In der pgfplots-Anleitung gibt es dazu mehrere Beispiele.

(14 Feb '18, 13:47) saputello

Wie von saputello in seinem Kommentar bereits vorgeschlagen, kann man mit den Optionen xticklabel, yticklabel, zticklabel auch Code zur Generierung des Labels angeben. Als Variablen für die Berechnung eines Labels stehen \tick (aktueller Tick-Wert, beispielsweise aus xtick), \ticknum (Nummer des aktuellen Ticks) und \nexttick (gibt es nur bei Verwendung von Intervallen für die Ticks) zur Verfügung.

Für Dein π-Beispiel könnte man etwas vereinfacht beispielsweise

Öffne in Overleaf
xticklabel={%
  \pgfmathparse{\tick / 3.14}%
  $\pgfmathprintnumber{\pgfmathresult}\pi$%
}

verwenden und bekommt dann:

Pi

Mit ein wenig Fallunterscheidung bekommt man auch Brüche statt 1.5 etc. hin.

Man kann auch das Beispiel mit Klammern über eine Funktion realisieren.

pgf bietet ja selbst auch Rundung und Fallunterscheidungen, so dass man wirklich sehr viel damit machen kann. In der pgfmath-Anleitung ist darüber hinaus auch ein Beispiel angegeben, bei dem \ifdim für Vergleiche missbraucht wird. Bei Verwendung von LuaTeX, das für pgfplots ohnehin empfehlenswert ist, kann man an der Stelle auch Lua-Code ausführen, um aufwendige Funktionen zu realisieren und erhält dann beispielsweise:

Klammerproblem

Da du bisher mit Listen gearbeitet hast, sei auch darauf hingewiesen, das etoolbox relativ aufwendige Listenoperationen bietet. Das sind dann zwar keine Komma separierten Listen mehr, aber man kann sich durchaus vorstellen, wiederum über xticklabel Code auszuführen, der das gewünschte Listenelement aus einer solchen Liste extrahiert.

Was die beste Lösung ist, ist IMHO nicht allgemein zu sagen. Es kommt letztlich auf die konkrete Anwendung an. Wann immer aber das Label quasi aus der Nummer des Ticks oder aus dem Wert des Ticks auf irgend eine Art berechnet werden kann, kann auch xticklabel, xticklabel bzw. zticklabel zum Einsatz kommen.

Als letzte Möglichkeit sei nur der Vollständigkeit halber noch darauf hingewiesen, dass pgfplots die Labels auch aus einer Tabelle lesen kann. Siehe dazu die Anleitung.

Permanenter link

beantwortet 14 Feb '18, 15:01

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 14 Feb '18, 15:31

Ok, verstanden. Aber die Liste xtick={-6.28, -4.71, -3.14, -1.57, 1.57, 3.14, 4.71, 6.28}, muss ich dafür weiterhin manuell setzen?

€dit: Ah wobei, die xticklist kann man mit der verlinkten Methode erstellen. Für einfache Zahlenrechnungen macht dieses xdef-Gedöns ja noch keine Probleme.

(14 Feb '18, 15:52) cis
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×298
×21
×21

gestellte Frage: 14 Feb '18, 01:58

Frage wurde gesehen: 11,873 Mal

zuletzt geändert: 14 Feb '18, 15:55