extern eingebundene pgfplots an achsen ausrichten?

Tabellen und Grafiken erstellen und anordnen


Flo Rida
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 71
Registriert: Do 22. Mai 2014, 23:07

extern eingebundene pgfplots an achsen ausrichten?

Beitrag von Flo Rida »

Hallo,

um die Kompilierungszeit zu verkürzen nutze ich in meinen pgfplots \tikzexternalize. Nur kann ich meine Diagramme wenn ich sie per \includegrafics einbinde nicht an einem bestimmten Punkt z.B. x-Achsenmittelpunkt ausrichten weil z.B. Legendeneinträge und Achsenbischriftungen unterschiedlich ausfallen. Kennt da jemand eine Möglichkeit die Ausrichtung entsprechend anzupassen?

Grüße
FloRida

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

Beitrag von esdd »

Ich habe nicht ganz verstanden, was Du machen möchtest. Aber vielleicht hilft Dir: Wie kann ich zwei pgfplots Diagramme übereinander ausrichten?

Gruß
Elke

Flo Rida
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 71
Registriert: Do 22. Mai 2014, 23:07

Beitrag von Flo Rida »

Hallo Elke,

so änhlich. Ich erstelle die Diagramme in einem anderen tex-File. Nach kompilieren liegen mit dann passgenaue pdf-Dateien lediglich mit den Diagrammen vor (siehe http://www.ctan.org/pkg/pgfplots). Diese füge ich dann in mein eigentliches Dokument mit \includegraphics{} ein. Jetzt kann ich aber nicht mehr an einer Achse ausrichten, wie ich es machen könnte, wenn ich alles zusammen in einer Datei erzeugen würde.

Grüße
FloRida

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

Beitrag von Johannes_B »

Ein Bild ist letztlich auch nur eine Box, wenn du zwei davon hast, musst du versuchen diese mit Augemaß aneinander auszurichten. Du kannst die pdfs auch in tikz nodes packen, vielleicht fällt dir das ausrichten so leichter.

Eventuell habe ich es auch falsch verstanden. Ein Minimalbeispiel hast du ja leider nicht geliefert.
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.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Du kannst ja die Bilder so erzeugen, dass die Achsen, oder was auch immer du ausrichten willst, in vordefinierten Abständen von den jeweiligen Rändern sind.

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi,

verstehe ich es richtig, dass Du in einem ersten Schritt Bilder externalisierst, und diese dann an _mehreren_ Stellen wieder mittels \includegraphics einbindest?

Pgfplots kommt von Haus aus mit einigen Tips zum automatischen Alignment. Einer dieser Ansaetze funktioniert auch gut mit externalization: trim axis left/trim axis right/baseline. Wie mir aufgefallen ist, fehlt zu Deinem Anwendungsfall lediglich die Dokumentation fuer ein spezialisiertes includegraphics makro.

Doch zunaechst der code:
\documentclass{article}

\usepackage{pgfplots}

\pgfplotsset{compat=1.11}

\usetikzlibrary{external}
\tikzexternalize[
	optimize command away=\pgfincludeexternalgraphics,
]


\begin{document}

\section{externalized}
Here is some text
\begin{tikzpicture}[trim axis left,trim axis right, baseline]
	\begin{axis}[xlabel=some x label, ylabel=some y label, legend entries=X, legend pos=outer north east,anchor=origin]

	\addplot {x};
		
	\end{axis}
\end{tikzpicture}%
after the figure is some text as well.

\section{With includegraphics}

Here is some text
\includegraphics{P-figure0.pdf}%
after the figure is some text as well.

\section{pgfincludeexternalgraphics}

Here is some text
\pgfincludeexternalgraphics{P-figure0}%
after the figure is some text as well.
\end{document}
Das Beispiel hat ein tikzpicture, dass durch Achsenbeschriftungen nicht natuerlicherweise zentriert ist.

Durch die Angabe von trim axis left wird alles von der Bounding Box entfernt, was "links der Achsengrenze" ist. Mit trim axis right wird aehnliches mit der rechten Seite gemacht. Damit kauft man sich die Schwierigkeit, dass links und rechts "unkontrolliert" Platz entsteht; das bild also ueberlapps mit dem umgebenden Platz erzeugt. Dafuer ist es auf jeden Fall zentriert.

Die Option "baseline" sorgt fuer die Korrekte vertikale Ausrichtung.

Der Witz: beides funktioniert _auch_ mit externalize! Die Bounding boxen werden beruecksichtigt, obwohl das externalisierte pdf "ganz normal" ist. Die Magie ist, dass diese Bounding box modifikationen bzw. vspaces in die .dpth des Bildes geschrieben werden.

Wenn man nun \pgfincludeexternalgraphics{P-figure0} macht, wird das Bild eingelesen und diese Bounding box modifikation / vspaces werden nachtraeglich angewandt. Das makro ist dasselbe, was tikz intern verwendet (und muss noch oeffentlich dokumentiert werden).

Die Ausfuehrung obigen Beispiels zeigt, dass so das externe Bild problemlos wieder eingelesen werden kann - etwas, was includegraphics so nicht kann.

Damit kann man auch alignment basierend auf solchen Bilderen machen. Du musst lediglich die .dpth Datei zusammen mit dem externalisierten pdf mitliefern.

Das "optimize command away" ist noetig, damit "external" waehrend des externalisierungsprozesses nicht versucht, "sich selber" zu inkludieren.

Mit liebem Gruss

Christian[/code]

Flo Rida
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 71
Registriert: Do 22. Mai 2014, 23:07

Beitrag von Flo Rida »

Danke dir Christian, du hast verstanden was ich meine.

Nur ist bei mir noch folgendes anders. Ich habe in meinem Ordner die .tex-Datei in der ich meine Arbeit schreibe. In einem Unterordner (Grafiken) habe ich eine weitere .tex-Datei, in der ich nur meine Grafiken (pgfplots) erstelle.

Jetzt sieht die .tex-Hauptdatei bei mir so aus:
\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\section{With includegraphics}

\includegraphics[width=\linewidth]{Grafiken/section1-Grafiken-figure0.pdf}

\includegraphics[width=\linewidth]{Grafiken/section1-Grafiken-figure1.pdf}


\section{pgfincludeexternalgraphics}

\pgfincludeexternalgraphics{Grafiken/section1-Grafiken-figure0}

\pgfincludeexternalgraphics{Grafiken/section1-Grafiken-figure1}


\end{document}
und eine .tex-Bilderdatei in einem Unterverzeichnis so:
\documentclass{article}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\usetikzlibrary{external}
\tikzexternalize

\begin{document}

\begin{tikzpicture}[trim axis left,trim axis right, baseline]
   \begin{axis}[xlabel=some x label, ylabel=some y label, legend entries=X, legend pos=outer north east,anchor=origin]

   \addplot {x};
     
   \end{axis}
\end{tikzpicture}

\begin{tikzpicture}[trim axis left,trim axis right, baseline]
   \begin{axis}[xlabel=some x label, ylabel=some y label, legend entries=Y, legend pos=outer north east,anchor=origin,scaled y ticks=manual:{}{\pgfmathparse{#1/10e-4}}]

   \addplot coordinates{
   (-50,-100)
   (-10,-60)
   (-2,15)
   (12,96)
   (32,112)
   };
     
   \end{axis}
\end{tikzpicture}

\end{document}
Diese "Unterdatei" wird natürlich mit -shell-escape kompiliert.

Leider hat aber meine Hauptdatei nach dem Kompilieren noch nicht das gewünschte aussehen. Siehe Anhang

Viele Grüße
Flo Rida

edit: Anhang lädt er leider nicht hoch :(

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

Beitrag von Johannes_B »

Dateianhänge sind hier seit einigen Jahren defekt.
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.

feuersaenger
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 91
Registriert: Mi 5. Okt 2011, 18:24
Wohnort: Rheinbach

Beitrag von feuersaenger »

Hi,

jetzt sehe ich auch, wie Du das im Produktivbetrieb einsetzt!

Es scheint, als ob hier eine Schwaeche (Fehler?) in dem von mir vorgeschlagenenen \pgfincludeexternalgraphics drin ist... scheinbar braucht der den "horizontalmodus", den man u.a. mit \noindent einleiten kann. Jedenfalls geht folgendes:
\documentclass{article}

\usepackage{pgfplots}

\begin{document}

\section{With includegraphics}

\includegraphics[width=\linewidth]{Grafiken/section1-Grafiken-figure0.pdf}

\includegraphics[width=\linewidth]{Grafiken/section1-Grafiken-figure1.pdf}


\section{pgfincludeexternalgraphics}

\noindent
\pgfincludeexternalgraphics{Grafiken/section1-Grafiken-figure0}

\noindent
\pgfincludeexternalgraphics{Grafiken/section1-Grafiken-figure1}


\end{document}
Ich werde mal schauen, ob man dieses fehlende Ding direkt in die external lib einbinden kann.



Hier noch eine Bemerkung, die ueber die eigentliche Frage hinaus geht: vielleicht kannst Du den ein- oder anderen Arbeitsablauf optimieren, indem Du spezifische Staerken von Paketen dediziert ausnutzt. Dazu schreibe ich ein bisschen; wenn Du das schon kennst oder es nicht anwendbar ist, dann ignoriere es einfach:

Die external lib ist dafuer optimiert, dass es im Grunde ein Hauptdokument gibt, dass alle Grafiken direkt einbindet. Die lib sorgt dafuer, dass diese Einbindung durch entsprechende includegraphics statements schneller ist und nur dann neu errechnet wird, wenn sich auch was geaendert hat. Das klappt inklusive anfaenglicher einmaliger Externalisierung normalerweise sehr gut.

Dein Ansatz der Art "ich wuerde gerne manuell die Bilder externalisieren und die Abhaengigkeiten aufloesen" geht wie in unseren thread hier auch; wird aber u.U. von dem Paket "standalone" besser addressiert.

In 'standalone' wird _jedes_ Bild in eine separate .tex Datei geschrieben, die \documentclass{standalone} besitzt. Genaueres findet sich in der Doku von standalone. Diese separaten PDFs kann man leicht und isoliert weitergeben/weiterbenutzen und kann sie auch in das Hauptdokument einbinden. Zugegebenermassen wird trim axis left und baseline damit vermutlich schwieriger; ich weiss nicht, ob es diesen oder vergleichbaren support gibt.

Aber vielleicht ist die Bemerkung ja fuer den ein- oder anderen Anwendungsfall hilfreich.

Mit liebem Gruss

Christian

Flo Rida
Forum-Fortgeschrittener
Forum-Fortgeschrittener
Beiträge: 71
Registriert: Do 22. Mai 2014, 23:07

Beitrag von Flo Rida »

Ahhhh, sehr cool. :D

Ja ich nutze es so wie du weiter unten geschrieben hast. Das ist mir eine große Hilfe.

Vielen Dank, liebe Grüße
Flo Rida

Antworten