Der Code für das MWE, das dieses Bild generiert, ist unten angegeben (zum Vergrößern klicken):
Im Grunde hatte ich einige Diagramme wie auf der linken Seite, bis mir klar wurde, dass ich die x-Achse verschieben muss – das zwingt mich auch, axis y line=middle
(linkes Diagramm) nach axis y line=left
(rechtes Diagramm) zu verschieben. Meine Fragen sind:
- Wie bekomme ich das Xlabel („t [ms]“) und das Ylabel („D“) auf dem rechten Diagramm an die gleiche Position wie auf dem linken Diagramm? (hoffentlich mit einem einzigen Befehl, der an beiden Stellen verwendet werden kann, d. h. ohne an einer Stelle „rotate“ verwenden zu müssen und an der anderen nicht)
- Wie kann ich die Null als erste Teilstrichbeschriftung der Y-Achse im rechten Diagramm verschwinden lassen, ohne die Beschriftungen manuell einzugeben?
- Wie erreiche ich, dass die Null als erste Teilstrichbeschriftung der X-Achse im linken Diagramm angezeigt wird?
- Mir gefällt die Organisation von einem
tikzpicture
mit zweiscope
s darin; diexshift
des rechten Diagramms ist jedoch ein Versuch und Irrtum. Was wäre die empfohlene „automatische“ Methode, um die beiden Diagramme mit dieser Struktur nebeneinander zu erhalten, wobei jedes die Hälfte der Seitenbreite einnimmt (das heißt, ohne zusätzlicheminipage
)?
Und eine Nebenfrage: Wie kann ich die Schriftart der Achsenbeschriftungen mit dem restlichen Dokumentstil (hier) übereinstimmen lassen IEEEtran
?
Hier ist der Code:
\documentclass[%
12pt,
journal,
twoside,
draftcls,
letterpaper,
]{IEEEtran}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread[col sep=&,row sep=\\]{
0.0159779999812599 & 0.00398599999607541 \\
0.0240009999834001 & 0.00802300000214018 \\
0.0240489999996498 & 4.80000162497163e-05 \\
0.0280280000006314 & 0.00397900000098161 \\
}\mytable
\begin{scope}
\begin{axis}[
title={\small my data},
title style={at={(0.5,0.9)},anchor=center},
clip=true,
axis x line=middle,
axis y line=middle,
xmin = 0,
xmax = 0.03,
ymin = 0,
ymax = 0.009,
xlabel={$t$\,[ms]},
xlabel style={at={(axis description cs:1.01,+0.0)},anchor=west},
ylabel={$D$},
ylabel style={at={(axis description cs:-0.02,1.01)},anchor=south},
%xtick=data,
scaled x ticks=base 10:3,
xtick scale label code/.code={},
x tick label style={
rotate=-45,
anchor=west,
/pgf/number format/fixed,
/pgf/number format/fixed zerofill,
/pgf/number format/precision=3,
},
ymajorticks=true,
yminorticks=false,
tick label style={font=\small,},
legend cell align=left,
legend pos=outer north east,
]
\addplot table \mytable;
\end{axis}
\end{scope}
\begin{scope}[xshift=240]
\begin{axis}[
title={\small my data},
title style={at={(0.5,0.9)},anchor=center},
clip=true,
axis x line=bottom,
axis y line=left,
xmin = -0.005,
xmax = 0.025,
ymin = 0,
ymax = 0.009,
xlabel={$t$\,[ms]},
xlabel style={at={(axis description cs:1.01,+0.0)},anchor=west},
ylabel={$D$},
ylabel style={at={(axis description cs:-0.02,1.01)},anchor=south},
%xtick=data,
scaled x ticks=base 10:3,
xtick scale label code/.code={},
x tick label style={
rotate=-45,
anchor=west,
/pgf/number format/fixed,
/pgf/number format/fixed zerofill,
/pgf/number format/precision=3,
},
ymajorticks=true,
yminorticks=false,
tick label style={font=\small,},
legend cell align=left,
legend pos=outer north east,
]
\addplot table \mytable;
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}
\end{document}
Antwort1
OK, ich bin weitergekommen – außer dass ich die Gesamtbreite der Diagramme nicht in die Ränder einpassen kann (ich hoffe, jemand bietet eine Lösung dafür):
Ansonsten:
- Das Ausrichten des Xlabels und Ylabels ist etwas mühsam. Beachten Sie, dass im Handbuch steht:
Die mit einem Sternchen versehenen Varianten . . . Linie* wirken sich lediglich auf die Achsenlinien aus, ohne die Positionen von Achsenbeschriftungen, Teilstrichen oder anderen Schlüsseln zu korrigieren, die (ggf.) von einer geänderten Achsenlinie betroffen sind.
was in diesem Fall bedeutet, dass ich zuerst axis y line=middle
die Beschriftungsposition wie gewünscht festlegen und sie dann anschließend zurücksetzen muss axis y line*=left
, sodass sich nur die Achsenposition ändert (dadurch wird auch die 0 als Y-Tick-Beschriftung hinzugefügt)
die Null als erste Beschriftung der x-Achse im linken Diagramm erscheinen zu lassen - ebenso durch "Überladen" mit
axis x line*=bottom
die Null als erste Teilstrichbeschriftung der Y-Achse im rechten Diagramm verschwinden zu lassen – etwas knifflig, aber das einzige, was zu funktionieren scheint, ist „Überladen“
yticklabel
und\ifnum
dort einen bedingten Befehl via festzulegen, der verwendet wird\ticknum
(der anscheinend bei 1 beginnt).die Schriftart der Achsenmarkierungsbeschriftung - das Problem ist, dass
pgfplots
die Achsenmarkierungsbeschriftungen standardmäßig im Mathematikmodus gesetzt werden; als Beispiel - ich habe dieyticklabel
Überladung so gelassen, dass sie die Zahl direkt setzt und man sieht, dass sie in Times ist. Andernfalls,Ändern Sie die Schriftart auch auf den Achsen in pgfplotserklärt, dass ein zusätzliches Paket geladen werden muss, um Times als mathematische Schriftart zu verwenden, und bei mir\usepackage{txfonts}
funktioniert es (obwohl ich auf das inProbleme bei der lokalen Schriftartinstallation, und die Lösung dort hat bei mir funktioniert).auto
xshift
ofscope
: ein ähnliches Problem ist inpgfplots - Positionieren eines Tikz-Bereichs relativ zu einem anderen Tikz-Bereich. Das ist nicht ganz automatisch, aber ich verwende die Hälfte von\textwidth
minus der Hälfte der beabsichtigten Trennung, um die Breite eines Plots festzulegen; wie man auf dem Bild sehen kann, ist es fast da, aber die Ränder stimmen nicht ganz; werde wahrscheinlich auch den Vorschlag von @JohnKormylo testen müssen
Und hier ist der Code:
\documentclass[%
12pt,
journal,
twoside,
draftcls,
letterpaper,
]{IEEEtran}
% \usepackage{txfonts} % Times font in math;
% tlmgr install txfonts ; texhash ; updmap-sys --enable Map=txfonts.map ; texhash
% [rm ~/.texlive2011/texmf-var/fonts/map/pdftex/updmap/pdftex.map]
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{positioning} % of
% https://tex.stackexchange.com/questions/33703/extract-x-y-coordinate-of-an-arbitrary-point-in-tikz
\makeatletter
\newcommand{\gettikzxy}[3]{%
\tikz@scan@one@point\pgfutil@firstofone#1\relax
\edef#2{\the\pgf@x}%
\edef#3{\the\pgf@y}%
}
\makeatother
\begin{document}
\newlength{\pw}
\setlength{\pw}{0.5\textwidth}
\addtolength{\pw}{-0.5cm}
\begin{tikzpicture}
\pgfplotstableread[col sep=&,row sep=\\]{
0.0159779999812599 & 0.00398599999607541 \\
0.0240009999834001 & 0.00802300000214018 \\
0.0240489999996498 & 4.80000162497163e-05 \\
0.0280280000006314 & 0.00397900000098161 \\
}\mytable
\begin{scope}[local bounding box=scope1]
\begin{axis}[
title={\small my data},
title style={at={(0.5,0.9)},anchor=center},
clip=true,
width=\pw,
axis x line=middle,
axis y line=middle,
axis x line*=bottom,
xmin = 0,
xmax = 0.03,
ymin = 0,
ymax = 0.009,
xlabel={$t$\,[ms]},
xlabel style={at={(axis description cs:1.01,+0.0)},anchor=west},
ylabel={$D$},
ylabel style={at={(axis description cs:-0.02,1.01)},anchor=south},
scaled x ticks=base 10:3,
xtick scale label code/.code={},
x tick label style={
rotate=-45,
anchor=west,
/pgf/number format/fixed,
/pgf/number format/fixed zerofill,
/pgf/number format/precision=3,
},
ymajorticks=true,
yminorticks=false,
tick label style={font=\small,},
legend cell align=left,
legend pos=outer north east,
]
\addplot table \mytable;
\end{axis}
\end{scope}
\gettikzxy{($(scope1.east)+(1cm,0)$)}{\ax}{\ay}
% none of this works:
% \begin{scope}[remember picture,at={($(scope1.east)+(1cm,0)$)}]%right=of scope1.east]%[at={($(scope1.east)+(1cm,0)$)}]
% ... only xshift:
\begin{scope}[xshift=\ax]
\begin{axis}[
title={\small my data},
title style={at={(0.5,0.9)},anchor=center},
clip=true,
width=\pw,
axis x line=middle,
axis y line=middle,
axis x line*=bottom,
axis y line*=left,
xmin = -0.005,
xmax = 0.025,
ymin = 0,
ymax = 0.009,
xlabel={$t$\,[ms]},
xlabel style={at={(axis description cs:1.01,+0.0)},anchor=west},
ylabel={$D$},
ylabel style={at={(axis description cs:-0.02,1.01)},anchor=south},
scaled x ticks=base 10:3,
xtick scale label code/.code={},
x tick label style={
rotate=-45,
anchor=west,
/pgf/number format/fixed,
/pgf/number format/fixed zerofill,
/pgf/number format/precision=3,
},
%yticklabel={\ifnum\ticknum=1{}\else\axisdefaultticklabel\fi},
yticklabel={\ifnum\ticknum=1{}\else\tick\fi},
ymajorticks=true,
yminorticks=false,
tick label style={font=\small,},
legend cell align=left,
legend pos=outer north east,
]
\addplot table \mytable;
\end{axis}
\end{scope}
\end{tikzpicture}
\end{document}