这篇文章背后的主要思想是获得适应性的 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 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}
答案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}