Interaktion zwischen den Achsen „equal=true“ und „xmin“ (und, wie ich vermute, „xmax“)

Interaktion zwischen den Achsen „equal=true“ und „xmin“ (und, wie ich vermute, „xmax“)

Ich möchte einen Bereich in meinem Plot schattieren, während ich verwende axes equal=true. Ein Teil dessen, was ich für schattiert hielt, ist jedoch nicht schattiert. Dies ist mein MWE

\documentclass{article}
\usepackage{pgfplots}

\pgfplotsset{compat=1.17} 

\begin{document}

     \begin{figure}
     \centering
     \begin{tikzpicture}
        \begin{axis}[ 
           axis equal=true,
           axis lines=middle,
           axis on top,
           ticks=none, 
           xmin=-3,xmax=3,
           ymin=-3,ymax=3,
           ]
          \addplot[draw=none,fill=gray!20!white] (-3,-3) -- (-1.125,-3) -- (0.375,3) -- (-3,3) -- cycle;
        \end{axis}
     \end{tikzpicture}
     \end{figure}

\end{document}

und das ist die Ausgabe, die ich bekomme

Bildbeschreibung hier eingeben

Aus irgendeinem Grund führt die Verwendung von equal axis=truedazu, dass die X-Achse über den Wert hinausragt xmin, wodurch mein schattierter Bereich zu klein wird. Wenn ich die Anweisung jedoch auskommentiere equal axis=true, sieht der schattierte Bereich genau so aus, wie ich es möchte (aber ich brauche die equal axis=trueAnweisung, um sicherzustellen, dass die Senkrechten, die ich zeichnen möchte, tatsächlich senkrecht aussehen).

Bildbeschreibung hier eingeben

Antwort1

Im pgfplots-Handbuch wird Folgendes erwähnt (Abschnitt 4.10.1 „Allgemeine Skalierungsoptionen“, Hervorhebung von mir):

/pgfplots/axis equal={true,false}
Jeder Einheitsvektor wird auf die gleiche Länge eingestellt, während die Achsenabmessungen konstant bleiben. Danach sind die Größenverhältnisse für jede Einheit in x und y gleich.
Achsengrenzen werden erweitertum den Skalierungseffekt auszugleichen.

Die Einstellung wird also tatsächlich xminnicht eingehalten. Nach den Beispielen heißt es im Handbuch:

Die Konfiguration axis equal=trueist eigentlich nur ein Stil, der festlegt unit vector ratio=1 1 1, unit rescale keep size=true.

Hoch schauen unit rescale keep size:

/pgfplots/unit rescale keep size=true|false|unless limits declared
In der Standardkonfiguration behält pgfplots die ursprünglichen Achsendimensionen bei, auch wenn das Einheitsvektorverhältnis unterschiedliche Skalierungen beinhaltet. Dies geschieht durch die Vergrößerung der Grenzen.

Wenn Sie dies auf setzen, unless limits declaredwird die xminÄnderung verhindert. Ich bin nicht 100 % sicher, dass diese Einstellung (in Kombination mit unit vector ratio=1 1 1) tatsächlich gleiche Achsen erzeugt, aber es scheint zu funktionieren. Code:

\documentclass{article}
\usepackage{pgfplots}

\pgfplotsset{compat=1.17} 

\begin{document}

     \begin{figure}
     \centering
     \begin{tikzpicture}
        \begin{axis}[ 
           %axis equal=true,
           unit vector ratio=1 1 1,
           unit rescale keep size=unless limits declared,
           axis lines=middle,
           axis on top,
           ticks=none,
           xmin=-3,xmax=3,
           ymin=-3,ymax=3,
           ]
          \addplot[draw=none,fill=gray!20!white] (-3,-3) -- (-1.125,-3) -- (0.375,3) -- (-3,3) -- cycle;
        \end{axis}
     \end{tikzpicture}
     \end{figure}

\end{document}

verwandte Informationen