Estou usando TikZ e pgfplots pela primeira vez. (Estou usando-o para poder enviar anotações de aula aos alunos de uma aula de Cálculo que estou ensinando.) Tenho um gráfico com uma assíntota inclinada. Antes de poder usar pgfplots para o gráfico, preciso fazer alguns ajustes apenas para as linhas do gráfico!
Vi em outro post que shorten <=2ex, shorten >=2ex
encurtaria uma linha em cada ponta em 2ex. Este comando encurtou a linha vertical, mas não a linha inclinada. Quero pontas de flecha em ambas as linhas; eles estão na linha vertical, mas não na linha inclinada. Quero as linhas rotuladas na mesma direção das linhas... mas fora da linha. Então, preciso mover um rótulo para cima e outro para a direita. Como arctan(3/2) = 56,31 graus, usei rotate=56.31
nas opções do nó. Existe um comando "inclinado" para desenhar esses rótulos na mesma direção da linha? Mais uma coisa. O rótulo "y" para o eixo y está muito próximo da linha vertical x=3/2. Como ajusto sua posição? (Também não gosto da posição do "x" no eixo x.)
\documentclass{amsart}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=4in,axis equal image,
axis lines=middle,
xmin=-15,xmax=15,
xlabel=$x$,ylabel=$y$,
ymin=-10,ymax=10,
restrict y to domain=-12:12,
enlargelimits={abs=1cm},
axis line style={latex-latex},
ticklabel style={font=\tiny,fill=white},
xtick={\empty},ytick={\empty},
]
\draw[dashed,latex-latex,shorten <=2ex, shorten >=2ex] (-13,-17) -- (13,22) node[right,rotate=56.31,pos=0.1]{$\scriptstyle{y=(3/2)x+5/2}$};
\draw[dashed,latex-latex,shorten <=2ex, shorten >=2ex] ({1.5,0} |- {{axis description cs:1,1}}) -- ({{1.5,0}} |- {{axis description cs:1,-1}}) node[right,rotate=90,pos=0.5]{$\scriptstyle{x=3/2}$};
\end{axis}
\end{tikzpicture}
\end{document}
Responder1
A razão pela qual os shorten
comandos não parecem funcionar de forma confiável é porque você não consegue ver o final das suas linhas: elas estão fora da área de plotagem e estão cortadas. Para ver as linhas completas, adicione clip=false
às suas axis
opções.
Eu abordaria isso de forma diferente: em vez de usar \draw
comandos, você pode usar gráficos "reais" com o \addplot
comando. Dessa forma, você pode especificar as equações diretamente, em vez de ter que calcular previamente o ângulo de rotação.
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=4in,axis equal image,
clip=false,
axis lines=middle,
xmin=-15,xmax=15,
domain=-15:15, samples=50,
xlabel=$x$,ylabel=$y$,
ymin=-10,ymax=10,
restrict y to domain=-12:12,
enlargelimits={abs=1cm},
axis line style={latex-latex},
ticklabel style={font=\tiny,fill=white},
xtick={\empty},ytick={\empty},
]
\addplot [dashed, latex-latex] {(3/2)*x+5/2} node [pos=0.25, anchor=south, font=\footnotesize, sloped] {$y=(3/2)x+5/2$};
\addplot [dashed, latex-latex] (1.5,x) node [pos=0.25, anchor=north, font=\footnotesize, sloped] {$x=3/2$};
\end{axis}
\end{tikzpicture}
\end{document}
Responder2
Você pode usar a sloped
opção em vez de calcular o ângulo:
Notas:
- Também substituí as frações de ripas por uma,
\frac
pois acho que fica muito melhor. - Para obter os rótulos dos eixos nas pontas você pode usar o
Axis Labels At Tip
estilo que extraí deComo dimensionar corretamente uma imagem TikZ/PGF que possui um `\begin{axis}...\end{axis}`. - A razão pela qual não havia pontas de seta em ambas as extremidades pode ser vista se você definir
clip=false
. As linhas estavam muito além do intervalo exibido. Assim, você pode editar as coordenadas para colocar os pontos finais das linhas no intervalo ou apenas aumentar a quantidade com a qual você encurta a linha. No MWE abaixo, aumentei osshorten
valores, pois era mais simples do que calcular as coordenadas apropriadas para manter a mesma inclinação e posição.
Código:
\documentclass{amsart}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
%% https://tex.stackexchange.com/questions/17438/how-to-properly-scale-a-tikz-pgf-picture-which-has-a-beginaxis-endaxis
%%
\pgfkeys{/pgfplots/Axis Labels At Tip/.style={
xlabel style={
at={(current axis.right of origin)},
xshift=1.5ex, anchor=center
},
ylabel style={
at={(current axis.above origin)},
yshift=1.5ex, anchor=center
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[width=4in,axis equal image,
axis lines=middle,
xmin=-15,xmax=15,
xlabel=$x$,ylabel=$y$,
ymin=-10,ymax=10,
restrict y to domain=-12:12,
enlargelimits={abs=1cm},
axis line style={latex-latex},
ticklabel style={font=\tiny,fill=white},
% xtick={\empty},ytick={\empty},
Axis Labels At Tip,
%clip=false
]
\draw[dashed,latex-latex,shorten <=4ex, shorten >=15ex] (axis cs: -13,-17) -- (axis cs: 13,22) node[right,sloped, above,pos=0.15]{$y=\frac{3}{2}x+ \frac{5}{2} $};
\draw[dashed,latex-latex,shorten <=2ex, shorten >=2ex] ({1.5,0} |- {{axis description cs:1,1}}) -- ({{1.5,0}} |- {{axis description cs:1,0}}) node[right,rotate=90, below, pos=0.65]{$x= \frac{3}{2}$};
\end{axis}
\end{tikzpicture}
\end{document}