自动设置轴限制,使其超越所有图纸

自动设置轴限制,使其超越所有图纸

这篇文章背后的主要思想是获得适应性的 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这就是问题所在。我想根据参数绘制多幅图(这是我最近学到的:自己的帖子),因此修改xmin, xmax, ymin, ymax不可行。考虑到这一点,我又试了一次:

在此处输入图片描述

图 5 太压缩了。我认为这是因为axis equalymax高于|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}

答案1

我认为\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}

相关内容