С удивительной помощью этого сообщества я нарисовал рисунок ниже несколько месяцев назад. Тогда я был очень доволен им; но со временем я хочу, чтобы мои фигуры выглядели все лучше и лучше. Как вы можете видеть на рисунке, некоторые линии выходят за пределы осей; и я, конечно, хочу этого избежать. Я видел в этом сообществе, что ответ заключается в использовании опции \clip
. TikZ
Я проверилДокументация TIkZи я уже некоторое время играюсь с этой опцией, но безуспешно. Кто-нибудь знает, как заставить эти линии держаться внутри осей, определенных графиком? Картинка ниже:
МВЭ, создающий такую картину, выглядит следующим образом:
\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}