[pgfplots] Einfügen von Beschriftung in Gruppierung

Tabellen und Grafiken erstellen und anordnen


feidel
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Do 18. Dez 2014, 08:25

[pgfplots] Einfügen von Beschriftung in Gruppierung

Beitrag von feidel »

Hallo,

ich habe ein kleines Problem. Ich kriege keine Beschriftung unterhalb meiner Plots hin...

Ich habe es zuerst mit 3 unterschiedlichen Bildern versucht und es dann mit dem subfigure Paket angeordnet, das sieht schon mal so aus wie ich es möchte. Mir gefallen aber die Plots nicht, da es zu viel doppelte Information gibt.

Bild

Ich habe das erstmal Nachbearbeitet, damit die Plots besser aussehen.

Bild

Jetzt hätte ich aber gerne die Beschriftungen unter jedem Diagramm wie in dem ersten Bild.

Kriege es leider nicht hin... hier ein Minimalbeispiel, wie ich es aktuell gemacht habe:
\documentclass[tikz,border=2pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{pgfplots}
\usepackage{tikz}
\pgfplotsset{compat=1.5}
\usepackage{graphicx}
\usepackage{lmodern}

\usepgfplotslibrary{groupplots}
\usetikzlibrary{pgfplots.groupplots}


\begin{document}
\centering
	\begin{tikzpicture}[smooth]
		\begin{groupplot}[group style={group size=3 by 1,horizontal sep=6pt}, xmin=0, ymin=0, ymax=4.5,no markers, grid=both, grid style=dashed]
			\nextgroupplot[ylabel={Spannung \(\sigma\) [MPa]}]
				\addplot coordinates {(0,1) (1,2) (2,3)};
				\addplot coordinates {(0,0) (1,1) (2,2)};
			\nextgroupplot[yticklabel=\empty, xlabel={Radius \(r\) [mm]}]
				\addplot coordinates {(0,1) (1,2) (2,3)};
				\addplot coordinates {(0,0) (1,1) (2,2)};
			\nextgroupplot[yticklabel pos=right]
				\addplot coordinates {(0,1) (1,2) (2,3)};
				\addplot coordinates {(0,0) (1,1) (2,2)};
				\legend{\(\sigma_r\),  \(\sigma_\phi\)}			
		\end{groupplot}
	\end{tikzpicture}
\end{document}

Und noch ein kleines Extra... ich hätte gerne noch Viertelreise die vom Koordinatenursprung loslaufen mit dem Radius 20 und 217. Die sollen aber nicht außerhalb des Diagramms sichtbar sein, kriegt man das auch irgendwie hin?
Dateianhänge
vers_2.png
vers_2.png (17.89 KiB) 4861 mal betrachtet
vers_1.png
vers_1.png (30.73 KiB) 4836 mal betrachtet

Stamm-

Ansatz einer nicht ganz kompletten Lösung

Beitrag von Stamm- »

Die Bibliothek grouplots von »pgfplots« ist hinsichtlich der Beschriftung einzelner Graphen schlecht geeignet. Es geht recht einfach mit einem Paket wie »subcaption« (Teil vom Bündel »caption«), mit dem so genannte "Unter-Abbildungen" möglich sind. Bezüglich der Gestaltung von Achsenbeschriftungen sind entsprechende Einstellungsmöglichkeiten in der Anleitung von »pgfplots« nachlesbar.
\documentclass[11pt,ngerman]{article}
\usepackage[T1]{fontenc}
\usepackage{selinput}         % Ersatz für »inputenc«
\SelectInputMappings{         % Festlegung der Eingabe-Kodierung
  adieresis={ä},              % mit Hilfe ausgewählter Sonderzeichen
  germandbls={ß}              % siehe: http://partners.adobe.com/public/developer/en/opentype/glyphlist.txt
}
\usepackage{babel}
\usepackage[margin=2cm]{geometry}
\usepackage{subcaption}
\usepackage{pgfplots}

\pgfplotsset{
  compat=1.11,
  width=0.35\linewidth
}

\begin{document}
  \begin{figure}[!ht]
    \centering
    \subcaptionbox{Aluminium}{%
      \begin{tikzpicture}
        \begin{axis}[
          xmin=0,
          ymin=0,
          ymax=4.5,
          no markers,
          grid=both,
          grid style=dashed
        ]
          \addplot coordinates {(0,1) (1,2) (2,3)};
          \addplot coordinates {(0,0) (1,1) (2,2)};
        \draw (axis cs:0,0) circle (2);
        \end{axis}%
        \draw (2,0) arc [start angle=0, end angle=90, radius=2cm];
      \end{tikzpicture}%
    }
    \subcaptionbox{Titan}{%
      \begin{tikzpicture}
        \begin{axis}[
          xmin=0,
          ymin=0,
          ymax=4.5,
          no markers,
          grid=both,
          grid style=dashed
        ]
          \addplot coordinates {(0,1) (1,2) (2,3)};
          \addplot coordinates {(0,0) (1,1) (2,2)};
        \end{axis}
      \end{tikzpicture}%
    }
    \subcaptionbox{Edelstahl}{%
      \begin{tikzpicture}
        \begin{axis}[
          xmin=0,
          ymin=0,
          ymax=4.5,
          no markers,
          grid=both,
          grid style=dashed
        ]
          \addplot coordinates {(0,1) (1,2) (2,3)};
          \addplot coordinates {(0,0) (1,1) (2,2)};
          \legend{\(\sigma_r\),  \(\sigma_\phi\)}
        \end{axis}
      \end{tikzpicture}%
    }
    \caption{Spannungsverlauf über den Radius $r$}
    \label{fig:spannung-r}
  \end{figure}
\end{document}
Was die Kreisbögen innerhalb der Diagramme angeht, gibt es zwei Möglichkeiten. Man kann außerhalb der Umgebung axis einen Bogen von 0° bis 90° zeichnen oder innerhalb einen kompletten Kreis, der dann nur im Koordinatensystem zu sehen ist. Beides habe ich mal für das erste Diagramm gemacht. Daran ist sofort zu erkennen, dass der Kreis innerhalb des Koordinatensystems nur dann die gewohnte Form erhält, wenn die Skalierung beider Achsen entsprechend angepasst ist. Sonst entsteht eine Ellipse. Eine solche könnte man innerhalb des Koordinatensystems auch zeichnen, wenn man sich die passenden Radien der Halbachsen selbst ausrechnet.

Die Breite der Diagramme ist hier global im Vorspann mit \pgfplotsset eingestellt worden. Lässt man sie weg, werden die Diagramme bei Übergröße automatisch auf mehrere Zeilen verteilt. Die "Unter-Abbildungen" werden mit dem Befehl \subcaptionbox erzeugt. Sie können alternativ auch mit der Umgebung subfigure und die Beschriftung dann mit dem bekannten Befehl \caption erstellt werden. Details dazu sind in der anleitung von »subcaption« zu finden.


Anmerkungen:
  • An deinem Beispiel ist zu sehen, dass Du die Version 1.5 von »pgfplots« benutzt. Version 1.11 ist die aktuelle. Somit ist deren Aktualisierung eine Überlegung wert.

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2766
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Beitrag von Stefan Kottwitz »

Ein Update: heute ist die Version 1.12 von pgfplots erschienen, die Nachricht vom CTAN-Newsticker kam vor ein paar Minuten.
Es ist Speicher-sparender und schneller, beispielsweise bei 3d-Plots.

Stefan

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

Beitrag von esdd »

Man kann auch die einzelnen Diagramme eines groupplot beschriften:
\documentclass{scrartcl} 
\usepackage[utf8]{inputenc} 
\usepackage[ngerman]{babel} 
\usepackage{pgfplots}% lädt auch tikz und damit auch graphicx
\pgfplotsset{compat=1.5}% aktuell wäre noch 1.11., demnächst 1.12 

\usepgfplotslibrary{groupplots} 


\makeatletter
\newcommand\gpsubtitle[1]{(\@alph{\pgfplots@group@current@plot}) #1}
\makeatother

\begin{document}
\begin{figure}[htb] 
  \centering 
  \begin{tikzpicture}[smooth] 
    \begin{groupplot}[
        group style={group size=3 by 1,horizontal sep=6pt,vertical sep=12ex},
        width=.38\textwidth,
        xmin=0, ymin=0, ymax=4.5,
        no markers, grid=both, grid style=dashed,
        title style={at={([yshift=-8ex]0.5,0)},anchor=north},
        subtitle/.style={title=\gpsubtitle{#1}}
      ] 
      \nextgroupplot[ylabel={Spannung \(\sigma\) [MPa]},subtitle=Alumninium] 
         \addplot coordinates {(0,1) (1,2) (2,3)}; 
         \addplot coordinates {(0,0) (1,1) (2,2)}; 
      \nextgroupplot[yticklabel=\empty, xlabel={Radius \(r\) [mm]},subtitle=Titan] 
         \addplot coordinates {(0,1) (1,2) (2,3)}; 
         \addplot coordinates {(0,0) (1,1) (2,2)}; 
      \nextgroupplot[yticklabel pos=right,subtitle=Edelstahl] 
         \addplot coordinates {(0,1) (1,2) (2,3)}; 
         \addplot coordinates {(0,0) (1,1) (2,2)}; 
         \legend{\(\sigma_r\),  \(\sigma_\phi\)}
    \end{groupplot}
  \end{tikzpicture}
  \caption{Spannungsverlauf über den Radius $r$} 
  \label{fig:spannung-r} 
\end{figure}
\end{document}
Bild

Gruß
Elke
Dateianhänge
gl_gpbeschr.png
gl_gpbeschr.png (22.46 KiB) 4812 mal betrachtet

feidel
Forum-Anfänger
Forum-Anfänger
Beiträge: 18
Registriert: Do 18. Dez 2014, 08:25

Beitrag von feidel »

Vielen dank euch Beiden!

Ich habe die version 1.5 genommen, weil ich dachte, dass das die aktuelle ist... 1.5>1.11 :)

Noch etwas nebenbei, ist es sinnvoller die Bilder vorher zu generieren und dann einfach in mein Hauptdokument einzubinden, oder soll ich in meinem Hauptdokument diese Diagrame generieren?

Bei zu vielen Diagramen dauert es doch irgendwann viel zu lange das Dokument zu kompilieren?

Stamm-

Betrachtungen

Beitrag von Stamm- »

feidel hat geschrieben:[…] Ich habe die version 1.5 genommen, weil ich dachte, dass das die aktuelle ist... 1.5>1.11 […]
Manchmal ist wissen halt besser als denken. ;) Mittlerweile ist auch die Version 1.12 im Paketdepot von TeX Live für die Aktualisierung erhältlich. Bei MiKTeX sieht es noch nicht danach aus.
feidel hat geschrieben:[…] Noch etwas nebenbei, ist es sinnvoller die Bilder vorher zu generieren und dann einfach in mein Hauptdokument einzubinden, oder soll ich in meinem Hauptdokument diese Diagrame generieren? […]
Ob das sinnvoll sein kann, ist fraglich. Zeit wird dadurch sicherlich nicht gespart, denn die Bearbeitung muss bei notwendigen Änderungen ohnehin erfolgen. Werden die Diagramme gleich im Quelltext des Dokuments erzeugt, ist jedenfalls die Übersicht größer, weil dann der Wechsel zwischen unterschiedlichen Dokumenten weg fällt.
feidel hat geschrieben:[…] Bei zu vielen Diagramen dauert es doch irgendwann viel zu lange das Dokument zu kompilieren?
Die Bearbeitungszeit für den Compiler kann auch schon bei sehr wenigen, dafür aber sehr komplexen Diagrammen in die Höhe schnellen. Davon sind besonders Graphen aus Messdaten betroffen.

Benutzeravatar
Johannes_B
Moderator
Moderator
Beiträge: 5079
Registriert: Do 1. Nov 2012, 14:55
Kontaktdaten:

Beitrag von Johannes_B »

Bei Speicherintensiven Plots ist die externalize-Funktion von TikZ toll. Das bild wird im Hintergrund als pdf-Bild angefertigt, und dann nur noch dieses eingebunden. Die Berechnungen fallen weg.
Sehr vorteilhaft ist die Erkennung von Änderungen. Dann wird das pdf-Bild neu erstellt.
Vorraussetzung ist hier allerdings das Verwenden der Option shell-escape.
TeXwelt - Fragen und Antworten Schaut vorbei und stellt Fragen.
LaTeX-Vorlagen?

Der Weg zum Ziel: Ruhe bewahren und durchatmen, Beiträge und unterstützende Links aufmerksam lesen, Lösungsansätze verstehen und ggf. nachfragen.

Antworten