자동으로 축 제한을 설정하여 모든 도면을 능가합니다.

Aug 21 2020

이 게시물의 주요 아이디어는 tikzpicture xy 축을 조정하는 것입니다. 즉, 그린 모든 포인트를 능가하는 축 (또는 그린 척)입니다.

내 초기 tikzpicture에서 드로잉의 한계는 축의 길이에 의해 결정됩니다. 그리고 나는 clip = false. 나는 이 포스트 에서 그것을 발견했다 . 그것은 clip = false필수적인 것 같습니다 .

그래도 축은 도면의 한계에 미치지 못합니다. 나는 더 짧은 x + 축 (그림 오른쪽 한계에 더 가깝게, 6), 더 긴 y + 축 (삼각형의 상단을 약간 넘어서 : 도면 상한을 약간 넘어 감), 더 긴 x- 축 (원주를 넘어서) 및 더 짧은 y-를 찾고있었습니다. 축 (x + 축과 같은 이유).

년 이 후, 나는 "당신은 설정하지 않아도 코멘트에 읽은 ymax값입니다.이 속성을 설정하지 않으면, pgfplots 확실히 모든 데이터 포인트가 게재 될 수 있도록 할 것이다." 또한 그 댓글에서 사용 \addplot하면 축 문제가 해결 된다고합니다 . 나는 몇 가지 확인을하기로 결정했다 :를 사용하여 그림을 추가 \addplot하고 지우는 것 xmin, xmax, ymin, ymax. 결과는 다음과 같습니다.

이미지 3은 단순히 재앙입니다. 이미지 4는 이미지 2와 차이 \addplot가 없으며 축 적응 문제를 해결하지 못했습니다.

제 생각에는 xmin, xmax, ymin, ymax여기에 문제가 있습니다. 매개 변수 (최근에 배웠던 : own post )를 기반으로 여러 그림을 그리고 싶으 므로 수정 xmin, xmax, ymin, ymax이 불가능합니다. 이를 염두에두고 또 다른 시도를했습니다.

이미지 5는 너무 압축되어 있습니다. 는보다 높기 axis equal때문 이라고 생각 했지만 이미지 6에서 볼 수 있듯이 잘못되었습니다.ymax|xmin|, xmax

마지막으로이 게시물을 찾았습니다. 수직 축 제한을 최대 / 최소 응답 위 / 아래로 설정합니다. 값 . 정확히 내가 원하는 것 같았 기 때문에 enlarge x limits=0.3(그리고 y)를 사용했습니다. 그러나 xmin, xmax, ymin, ymax다시 이미지 3 을 반환 하지 않고 사용 합니다. xmin, xmax, ymin, ymaxnewcommand의 tikzpictures에는 변수 값이 있기 때문에 함께 사용하는 것은 옵션이 아닙니다.

이제 내 질문은 'ymax 도면'값 '위에 y + 축을,'ymin 도면 '값 아래에 y 축을 어떻게 관리합니까? 그리고 x 축에서도 같은 생각입니다.

내 MWE (Original Image)는 다음과 같습니다.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,math}
\usetikzlibrary{shapes.misc}
\usepackage{pgfplots}

\pgfplotsset{compat=newest}

\usepackage{vmargin}
\setmargins{2.5cm}      
{1.5cm}                
{15.5cm}               
{23.42cm}           
{10pt}                 
{1cm}                 
{0pt}                    
{2cm}

\begin{document}
    
\newcommand{\example}[3]{
    \tikzmath{
        \mya = #1;
        \myb = #2;
        \myr = #3;
    }
    \begin{tikzpicture}
    \begin{axis}[
%   clip = false,
    axis lines* = middle,
    axis equal,
    xmin = -5, xmax= 8, ymin= -5, ymax = 7,
    xtick = \empty, ytick = \empty,
    extra x ticks={\mya, 2,6},
    extra y ticks={\myb, -1}
    ]
%   \addplot[domain=-4:5, color=cyan]{x^2-2*x-1};
    \filldraw [red] (axis cs:\mya,\myb) circle (0.1);
    \filldraw [red] (axis cs:0,-1) circle (0.1);
    \draw[dashed, red] (\mya, \myb) -- (0, -1);
    \draw[purple] (-3,-3) -- (2,2);
    \filldraw [dashed, green, fill opacity=0.1] (axis cs:\mya,\myb) circle(\myr);
    \filldraw [blue, fill opacity=0.2](2,0) -- (6,0) -- (4,10) -- (2,0);
    \node [label={(a,b)}] at (\mya, \myb) {};
    \end{axis}
    \end{tikzpicture}
}

\example{-7}{4}{2}

\end{document}

답변

2 TorbjørnT. Aug 21 2020 at 21:49

내 생각 \addplot 않는 문제를 해결할 수 있지만, 그것으로 다이어그램의 모든 요소를 그릴 그냥 무작위로 포물선을 그릴하지 않도록해야합니다.

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc,math}
\usetikzlibrary{shapes.misc}
\usepackage{pgfplots}

\pgfplotsset{compat=newest}

\usepackage{vmargin}
\setmargins{2.5cm}      
{1.5cm}                
{15.5cm}               
{23.42cm}           
{10pt}                 
{1cm}                 
{0pt}                    
{2cm}

\begin{document}
    
\newcommand{\example}[3]{
    \tikzmath{
        \mya = #1;
        \myb = #2;
        \myr = #3;
    }
    \begin{tikzpicture}
    \begin{axis}[
    axis lines* = middle,
    axis equal,
    xtick={\mya, 2,6},
    ytick={\myb, -1}
    ]

    \addplot[red,mark=*,dashed, mark options={solid}] coordinates {(\mya,\myb)(0,-1)};
    \addplot[purple] coordinates{(-3,-3)(2,2)};
    \addplot[dashed, draw,fill,fill opacity=0.1,green,domain=0:360] ({\mya+cos(x)*\myr},{\myb+sin(x)*\myr});
    \addplot[blue, fill, fill opacity=0.2] coordinates {(2,0)(6,0)(4,10)(2,0)};
    \node [above] at (\mya, \myb) {(a,b)};
    \end{axis}
    \end{tikzpicture}
}

\example{-7}{4}{2}

\end{document}