軸制限を自動的に設定して、すべての図面を超えます

Aug 21 2020

この投稿の背後にある主なアイデアは、tikzpicturexy軸を適応させることです。つまり、描画された(または描画されたふりをした)すべてのポイントを超える軸です。

私の最初の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は、ここに問題があります。パラメータ(最近学んだこと:自分の投稿)に基づいて複数の絵を描きたいので、変更することxmin, xmax, ymin, ymaxはできません。それを念頭に置いて、私は別の試みをしました:

画像5はとても圧縮されています。がずっと高いからaxis equalだと思ったのymaxですが|xmin|, xmax、画像6のように間違っていました。

最後に、私はこの投稿を見つけました:最大/最小応答の上/下に垂直軸の制限を設定します。値。それはまさに私が望んでいたもののようだったので、私はenlarge x limits=0.3(そしてy)を使用しました。しかし、それを使用しても、xmin, xmax, ymin, ymax画像3は返されませんでした。またxmin, xmax, ymin, ymax、newcommandのtikzpicturesには変数値があるため、一緒に使用することはできません。

さて、私の質問は、y +軸を「ymax図面」の値より上に、y軸を「ymin図面」の値より下にするにはどうすればよいですか?そして、x軸についても同じ考えです。

私のMWE(元の画像)は次のとおりです。

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