![绘制满足不等式的整数点集](https://linux22.com/image/460426/%E7%BB%98%E5%88%B6%E6%BB%A1%E8%B6%B3%E4%B8%8D%E7%AD%89%E5%BC%8F%E7%9A%84%E6%95%B4%E6%95%B0%E7%82%B9%E9%9B%86.png)
我想绘制平面中满足线性不等式的一定范围内的格点集。例如,所有 x 和 y 介于 0 到 10 之间的整数点 (x,y) 都满足 x + y <= 5。我曾尝试使用两个 for 循环来执行此操作,但这使 pgfplots 感到困惑:
\documentclass{article}
\usepackage{pgfplots}
\usepackage{pgffor}
\begin{document}
\begin{tikzpicture}
\begin{axis}[xmin=0,xmax=10,ymin=0,ymax=10]
\foreach \a in{0,...,10}{
\foreach \b in{0,...,5-\a}{
\draw (axis cs: \a,\b) circle;
}
}
\end{axis}
\end{tikzpciture}
\end{document}
提前致谢。
答案1
foreach
循环不起作用pgfplots
(与纯循环中的方式相同tikz
)。- 类似的功能提供命令
\pgfplotsinvokeforeach
,但它不支持这些命令的简单嵌套
因此,对于所需的图像,最好坚持使用纯净的图像\tikz
:
\documentclass[margin=3mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
% axis
\draw[<->] (0,10) node[below left] {$y$} |- (10,0) node[below left] {$x$};
% dots of inequality
\foreach \x [count=\xi] in {0,...,5}
\foreach \y [count=\yi from 0] in {\x,...,5}
\fill (\x,\yi) circle[radius=2pt];
\end{tikzpicture}
\end{document}
答案2
你可以draw
使用grid
选项line width=2pt, line cap=round, dash pattern=on 0pt off 1cm
来获取整数点。然后clip
得到你想要的。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw(0,10)node[left]{$y$}--(0,0)--(10,0)node[right]{$x$};
\clip[shift={(.1,.1)}](-1,6)--(6,-1)--(-1,-1)--cycle;
\draw[line width=2pt, line cap=round, dash pattern=on 0pt off 1cm](0,0) grid (10,10);
\end{tikzpicture}
\end{document}
答案3
\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
view={0}{90},
xmin=0, xmax=10,
ymin=0, ymax=10,
]
\addplot3[
only marks,
domain=0:10, samples=11,
domain y=0:10, samples y=11,
z filter/.expression={x+y<=5?z:nan},
] {0};
\end{axis}
\end{tikzpicture}
\end{document}