Com a incrível ajuda desta comunidade, fiz o desenho abaixo há alguns meses. Naquela época, fiquei muito feliz com isso; mas com o passar do tempo, quero que minhas figuras fiquem cada vez melhores. Como você pode ver na imagem, algumas linhas ultrapassam a margem dos eixos; e é claro que quero evitar isso. Tenho visto nesta comunidade que a resposta é usar a \clip
opção TikZ
. Eu verifiquei oDocumentação TIkZe já estou brincando com essa opção há algum tempo, mas sem sucesso algum. Alguém sabe como forçar essas linhas a ficarem dentro dos eixos definidos pelo gráfico? A imagem está abaixo:
O MWE que gera tal imagem é o seguinte:
\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}
E a imagem é:
Então, minha pergunta é:como faço para forçar as linhas a permanecerem dentro do gráfico?
BÔNUS: Alguém sabe o que está gerando as anormalidades da grade vertical (linha pontilhada cinza)?
PS: Estou ciente de que o código da figura provavelmente pode ser melhorado; Acabei de usar outras figuras que tive para criar esta porque sou novo no TikZ. Além disso, pode parecer uma duplicata, mas não acho que seja porque não encontrei nenhuma maneira de usar adequadamente a \clip
opção para obter o que desejo.
EDITAR: Como tenho várias figuras com o mesmo problema; Eu realmente aprecio soluções gerais; embora qualquer ajuda seja, obviamente, muito apreciada.
Muito obrigado a todos pelo seu tempo!
Responder1
Você deve clip
antes de desenhar definir o recorte dentro de um escopo, a menos que queira aplicá-lo ao resto da figura. Neste caso, mova suas funções dentro de um escopo como:
\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}