我之前曾尝试回答过这个问题,但后来删除了,因为我觉得主题行具有误导性。对于可能造成的任何混淆,我深表歉意。
我的任务是在 x=1(概率质量函数)处绘制一条简单的垂直线。以下代码对我来说很有意义,但它挂起了编译器,需要重新启动:
\begin{tikzpicture}
\begin{axis}[axis x line =middle, axis y line= left]
\addplot[domain=1:1] {0.6*x};
\addplot[mark=*] coordinates {(1,0.6)};
\end{axis}
\end{tikzpicture}
如果我删除该行,\addplot[domain=1:1] ...
它会编译成功。如果我将该行更改为,\addplot[domain=1] ...
它会编译成功,但会出现 17 个错误。我对 axis 环境和 addplots 还不熟悉。我在网上找到的所有教程或技巧都无法解决我的问题。
为了符合发布标准,以下是完整的、最小的代码:
\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis x line =middle, axis y line= left]
\addplot[domain=1:1] {0.6*x};
\addplot[mark=*] coordinates {(1,0.6)};
\end{axis}
\end{tikzpicture}
\end{document}
答案1
pgfplots
有一个专门用于绘制从 x 轴延伸出的垂直线的绘图类型:ycomb
。
xcomb
与水平线有对应关系。
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line= middle,
xmin=0, xmax=2,
ymin=0, ymax=1
]
\addplot [ycomb] coordinates {(1,0.6)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
感谢我删除了我之前的回答以及您的原始问题,现在我可以消化并重新表述我最初写的内容:
- 使用
domain=1
将导致语法错误。您需要使用类似 的内容domain=1:2
,即两个数字分别表示域的开始和结束,并以冒号分隔。 - 我可以重现您在使用时遇到的问题
domain=1:1
。但是如果您使用 LuaLaTeX 进行编译,则不会出现此问题。我目前没有答案。(实际上,理论上这应该绘制一个长度为零的图,但不可见。) - 但是,对于垂直线,您
domain
根本不需要,因为您只需使用坐标列表(在本例中只有两个)来绘制它即可。
使用此代码作为示例:
\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis x line=middle, axis y line= middle,
xmin=0, xmax=2, ymin=0, ymax=1]
\addplot[domain=0.5:1.5, blue] {0.6*x}; % <-- 0.6*x would give a diagonal line
\addplot[red] coordinates {(1,0) (1,0.6)}; % <-- this should be what you are looking for
\addplot[mark=*] coordinates {(1,0.6)};
\end{axis}
\end{tikzpicture}
\end{document}