Tikz で適切にクリッピングしますか?

Tikz で適切にクリッピングしますか?

このコミュニティの素晴らしい助けを借りて、私は数か月前に下の絵を描きました。当時は、とても満足していましたが、時が経つにつれて、もっともっと見栄えのよい図を作りたいと思うようになりました。絵を見るとわかるように、いくつかの線が軸の余白を超えています。もちろん、それを避けたいのです。このコミュニティで、解決策は\clipのオプションを使うことだと知りましたTikZTIkZ ドキュメント私はしばらくそのオプションを試してきましたが、まったく成功していません。これらの線をプロットで定義された軸の内側に強制的に固定する方法を知っている人はいますか? 写真は以下のとおりです。

このような画像を生成する MWE は次のとおりです。

\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}

そしてその写真は次のとおりです。

ここに画像の説明を入力してください

さて、私の質問は次のとおりです。線をプロット内にとどめるにはどうすればよいですか?

ボーナス: 垂直グリッド(灰色の点線)の異常の原因が何なのか知っている人はいますか?

PS: 図のコードはおそらく改善できると思います。私は TikZ を初めて使うので、この図を作成するために他の図を使用しました。また、重複しているように見えるかもしれませんが、\clipオプションを適切に使用して目的を達成する方法が見つからなかったため、重複しているわけではないと思います。

編集: 同じ問題を抱えたフィギュアが数体から多数あるため、一般的な解決策を教えていただければ幸いです。もちろん、どんな助けでも大歓迎です。

皆様、お時間をいただきありがとうございました!

答え1

図の残りの部分に適用する場合を除き、描画する前にスコープ内でクリッピングを定義する必要がありますclip。この場合、次のように関数をスコープ内に移動します。

\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}

ここに画像の説明を入力してください

関連情報