Mit der großartigen Hilfe dieser Community habe ich vor einigen Monaten das folgende Bild gezeichnet. Damals war ich sehr zufrieden damit, aber mit der Zeit möchte ich, dass meine Figuren immer besser aussehen. Wie Sie im Bild sehen können, überragen einige Linien den Rand der Achsen, und das möchte ich natürlich vermeiden. Ich habe in dieser Community gesehen, dass die Lösung darin besteht, die \clip
Option von zu verwenden TikZ
. Ich habe das überprüftTIkZ-Dokumentationund ich habe jetzt schon eine Weile mit dieser Option experimentiert, aber ohne Erfolg. Weiß jemand, wie man diese Linien dazu zwingt, innerhalb der durch das Diagramm definierten Achsen zu bleiben? Das Bild ist unten:
Das MWE, das ein solches Bild erzeugt, ist das folgende:
\documentclass[]{standalone}
% PACKAGES LOADING
\usepackage[dvipsnames]{xcolor} % To get many colours.
\usepackage{amsmath, mathtools, amsthm, mathrsfs, amssymb} % MATH Packages
\usepackage{tikz} % To plot almost everything.
% TIKZ SETTING
\usetikzlibrary{fit, calc, matrix, positioning, arrows.meta, intersections, through, backgrounds, patterns}
\begin{document}
\begin{tikzpicture}[my plot/.style={thick, smooth, samples=100, domain=0:1}, my grid/.style={densely dotted,opacity=0.5, every node/.style={black,opacity=1},}, my axis/.style={latex-latex}, scale=1.5]
\draw[thick, smooth,color=Red,] (0,1) -- (1,1);
\draw[thick, smooth,color=Green,] (0,1.5) -- (1,1.5);
\draw[my plot, color=Blue] (0,0) plot (\x,{(3*\x)});
\coordinate (start plot) at (0,{(0)});
\coordinate (end plot) at (1.5,{(4)});
\draw[my plot, color=Orange, shift={(0,3)},] (0,0) plot (\x,{(-3*\x)});
\draw[my axis] ([shift={(-0cm,0cm)}]start plot |- end plot) node[above] {$H_1$} |- node[coordinate](origin){} ([shift={(0cm,-0cm)}]start plot -| end plot) node[right] {$q$};
\def\x{0.5}\def\y{4}\def\p{0.55}
\coordinate (a) at (0.0,{(0.0)});
\coordinate (b) at (1,{(3)});
\coordinate (c) at (0,{(1)});
\coordinate (d) at (0,{(1.5)});
\coordinate (e) at (1,{(1)});
\coordinate (f) at (1,{(1.5)});
\coordinate (g) at (1,{(0.25)});
\coordinate (h) at (1,{(2.75)});
\draw[my grid] (a) |- node[below,font=\scriptsize]{$0$} (origin) |- node[left,font=\scriptsize]{$0$} cycle;
\draw[my grid] (b) |- node[below,font=\scriptsize]{$1$} (origin) |- node[left,font=\scriptsize]{$3$} cycle;
\draw[my grid] (c) |- node[left,font=\scriptsize]{$1$} cycle;
\draw[my grid] (d) |- node[left,font=\scriptsize]{$1.5$} cycle;
\draw[my grid] (e) |- node[right,font=\scriptsize]{$\textcolor{Red}{H_1(B,q)=1}$} cycle;
\draw[my grid] (f) |- node[right,font=\scriptsize]{$\textcolor{Green}{H_1(\sigma_1,q)=1.5}$} cycle;
\draw[my grid] (g) |- node[right,font=\scriptsize]{$\textcolor{Orange}{H_1(M,q)=3(1-q)}$} cycle;
\draw[my grid] (h) |- node[right,font=\scriptsize]{$H_1(T,q)=3q$} cycle;
\clip(0,0) rectangle (1.5,4);
\end{tikzpicture}
\end{document}
Und das Bild ist:
Dann ist meine Frage:wie erzwinge ich, dass die Zeilen innerhalb der Handlung bleiben?
BONUS: Weiß jemand, was die Anomalien des vertikalen Gitters (graue gepunktete Linie) verursacht?
PS: Mir ist bewusst, dass der Code der Figur wahrscheinlich verbessert werden kann; ich habe nur andere Figuren verwendet, um diese hier zu erstellen, weil ich neu bei TikZ bin. Außerdem sieht es vielleicht wie ein Duplikat aus, aber ich glaube nicht, dass es eines ist, weil ich keine Möglichkeit gefunden habe, die \clip
Option richtig zu verwenden, um das zu bekommen, was ich will.
BEARBEITEN: Da ich mehrere bis viele Figuren mit demselben Problem habe, wäre ich für allgemeine Lösungen sehr dankbar; für jede Hilfe wäre ich jedoch natürlich sehr dankbar.
Vielen Dank an alle für Ihre Zeit!
Antwort1
Sie müssen clip
vor dem Zeichnen das Clipping innerhalb eines Bereichs definieren, es sei denn, Sie möchten es auf den Rest der Figur anwenden. Verschieben Sie in diesem Fall Ihre Funktionen innerhalb eines Bereichs wie:
\begin{scope}
\clip (0,0) rectangle (1,3);
\draw[my plot, color=Orange, shift={(0,3)},] (0,0) plot (\x,{(-3*\x)});
\draw[my plot, color=Blue] (0,0) plot (\x,{(3*\x)});
\end{scope}