Mehrere PGF Plots ausrichten

Tabellen und Grafiken erstellen und anordnen


Knigge
Forum-Anfänger
Forum-Anfänger
Beiträge: 36
Registriert: Di 9. Sep 2014, 10:56

Mehrere PGF Plots ausrichten

Beitrag von Knigge »

Hallo,

ich habe mal wieder ein schier unlösbares Problem. Ich habe mehrere tikzpictures in einer figure Umgebung. Nun möchte ich aber das die Diagramme untereinander sind und auch die Achsenbeschriftung an der linken Seite soll auf einer Linie sein. Ich vermute mal das das Problem daran liegt, das ich die tikzpicture Umgebung beendet habe um ein neues Diagramm zu machen und somit die Verbindung fehlt. Daher habe ich auch schon probiert mehrere axis Umgebungen hintereinander zu setzen. Leider erfolglos.
Wenn der Befehl \pgfplotsset{compat=newest} entfernt wird, sind Sie ausgerichtet aber die Achsenbeschriftung geht manchmal auch bis in die Zahlen hinein. Außerdem benötige ich den Befehl um bei anderen Plots die Linke und Rechte Achse zu beschriften.

Hat jemand eine gute Idee um das Problem zu lösen? Ich würde mir auch die Mühe machen und die Sache mit hspace ausrichten, damit es gut aussieht nur leider weiß ich nicht wo.

\documentclass{scrartcl} 
\usepackage{tikz,pgfplots}
\usetikzlibrary{positioning, calc, arrows}
\usetikzlibrary{decorations.pathmorphing, fadings, patterns}

\pgfplotsset{compat=newest}

\begin{document}
\begin{figure}
\centering
  \begin{tikzpicture}
    \begin{axis}[scale only axis,
    grid=both, 
    height=2.6cm, width=12cm,
    xlabel={Zeit [ $ s $ ]},
    ylabel style={text width=4cm,align=center},
    ylabel={{Bremsmoment [ $ Nm $ ]}},]
    \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,4.4)};
    \end{axis}
  \end{tikzpicture}\\
  \begin{tikzpicture}
    \begin{axis}[scale only axis,
    grid=both, 
    height=2.6cm, width=12cm,
    xlabel={Zeit [ $ s $ ]},
    ylabel style={text width=4cm,align=center}, 
    ylabel={{Motorsantriebsmoment [ $ Nm $ ]}},]
    \addplot coordinates {(1,-660.4)(2,-430.4)(3,-40.8)(4,-40.1)(5,-90.4)};
    \end{axis}
  \end{tikzpicture}
  \begin{tikzpicture}
    \begin{axis}[scale only axis,
    grid=both, 
    height=2.6cm, width=12cm,
    xlabel={Zeit [ $ s $ ]},
    ylabel style={text width=5cm,align=center}, 
    ylabel={{Antriebsmoment [ $ Nm $ ]}},]
    \addplot coordinates {(1,-6336.4)(22,-443.4)(33,-421.8)(64,-4434.1)(95,-9234.4)(125,-934.4)};
    \end{axis}
  \end{tikzpicture}  
\end{figure}
\end{document}

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

Beitrag von esdd »

Zwischen dem mittleren und dem unteren Diagrammm fehlt ein manueller Umbruch.

Die Diagramme könntest Du ausrichten, in dem Du allen tikzpicture Umgebungen die Option trim axis left verpasst. Allerdings gehört dann die gesamte Beschriftung der y-Achsen nicht mehr zu den Bounding Boxen und rutscht beim Zentrieren der Diagramme zu weit nach links. Auf Grund der Breite der Diagramme könntest Du sie auch einfach mit \raggedleft rechtsbündig ausrichten.

Da Du aber sowieso auch die ylabel aneinander ausrichten willst, ist es einfacher diese "obere" Zeile der Beschriftung in einem festen Abstand zur y-Achse zu positionieren:

\documentclass{scrartcl} 
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\tikzset{
  myylabelstyle/.style={
    text width=#1,align=center,
    anchor=north,at={(rel axis cs:-0.2,0.5)}
  }
}

\usepackage{showframe}% Anzeigen der Seitenaufteilung

\begin{document} 
\begin{figure} 
\centering
   \begin{tikzpicture} 
     \begin{axis}[scale only axis, 
     grid=both, 
     height=2.6cm, width=12cm, 
     xlabel={Zeit [ $ s $ ]}, 
     ylabel style={myylabelstyle=4cm}, 
     ylabel={{Bremsmoment [ $ Nm $ ]}},] 
     \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,4.4)}; 
     \end{axis} 
   \end{tikzpicture}\\ 
   \begin{tikzpicture} 
     \begin{axis}[scale only axis, 
     grid=both, 
     height=2.6cm, width=12cm, 
     xlabel={Zeit [ $ s $ ]}, 
     ylabel style={myylabelstyle=4cm}, 
     ylabel={{Motorsantriebsmoment [ $ Nm $ ]}},] 
     \addplot coordinates {(1,-660.4)(2,-430.4)(3,-40.8)(4,-40.1)(5,-90.4)}; 
     \end{axis} 
   \end{tikzpicture}\\
   \begin{tikzpicture} 
     \begin{axis}[scale only axis, 
     grid=both, 
     height=2.6cm, width=12cm, 
     xlabel={Zeit [ $ s $ ]}, 
     ylabel style={myylabelstyle=5cm}, 
     ylabel={{Antriebsmoment [ $ Nm $ ]}},] 
     \addplot coordinates {(1,-6336.4)(22,-443.4)(33,-421.8)(64,-4434.1)(95,-9234.4)(125,-934.4)}; 
     \end{axis} 
   \end{tikzpicture}   
\end{figure} 
\end{document} 
Gruß
Elke

Knigge
Forum-Anfänger
Forum-Anfänger
Beiträge: 36
Registriert: Di 9. Sep 2014, 10:56

Beitrag von Knigge »

Vielen Dank. Genau danach habe ich gesucht.

Ich bin immer wieder begeistert von der Schnelligkeit und der Qualität der Antworten...

Knigge
Forum-Anfänger
Forum-Anfänger
Beiträge: 36
Registriert: Di 9. Sep 2014, 10:56

Beitrag von Knigge »

Da bei mir gleich die nächste Frage aufkam, wie mache ich das mit einem Diagramm (PGF Plot) mit Zwei Y Achsen. Hier die Lösung für alle.

Die Diagramme mussten natürlich schmaler gemacht werden, damit man nicht auf den Rand kommt.

\documentclass{scrartcl}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}

\tikzset{
  myylabelstyle/.style={
    text width=#1,align=center,
    anchor=north,at={(rel axis cs:-0.2,0.5)}
  }
}

\usepackage{showframe}% Anzeigen der Seitenaufteilung

\begin{document}
\begin{figure}
\centering
   \begin{tikzpicture}
     \begin{axis}[scale only axis,
     grid=both,
     height=2.6cm, width=9cm,
     xlabel={Zeit [ $ s $ ]},
     ylabel style={myylabelstyle=3cm},
     ylabel={{Bremsmoment [ $ Nm $ ]}},]
     \addplot coordinates {(1,6.45)(2,3.4)(3,4.8)(4,4.1)(5,4.4)};
     \end{axis}
   \end{tikzpicture}\\
   \begin{tikzpicture}
     \begin{axis}[scale only axis,
     grid=both,
     height=2.6cm, width=9cm,
     xlabel={Zeit [ $ s $ ]},
     ylabel style={myylabelstyle=4cm},
     ylabel={{Motorsantriebsmoment [ $ Nm $ ]}},]
     \addplot coordinates {(1,-660.4)(2,-430.4)(3,-40.8)(4,-40.1)(5,-90.4)};
     \end{axis}
   \end{tikzpicture}\\
   \begin{tikzpicture}[trim axis right]
     \begin{axis}[scale only axis,
     grid=both,
     height=2.6cm, width=9cm,
     xlabel={Zeit [ $ s $ ]},
     ylabel style={myylabelstyle=5cm},
     ylabel={{Antriebsmoment1 [ $ Nm $ ]}},]
     \addplot [color=green] coordinates {(1,-6336.4)(22,-443.4)(33,-421.8)(64,-4434.1)(95,-9234.4)(125,-934.4)};
     \end{axis}
     \begin{axis}[scale only axis,
     grid=both,
     height=2.6cm, width=9cm,
     yticklabel pos=right,
     ylabel style={text width=4cm,align=center}, 
     ylabel={{Antriebsmoment2 [ $ Nm $ ]}},
     xtick=\empty,]
     \addplot [color=red] coordinates{(1,336.4)(22,43.4)(33,21.8)(64,434.1)(95,234.4)(125,34.4)};
     \end{axis} 
   \end{tikzpicture}  
\end{figure}
\end{document} 

Antworten