我设法用 pgfplots 和 Ti 制作了下图钾Z:
这正是我想要的效果。以下 M(-ish)WE 重现了该图:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\pagenumbering{gobble}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=1,
ymin=0, ymax=1,
enlargelimits=true,
xtick=\empty, ytick=\empty,
xlabel={$V$},
ylabel={$p$},
axis lines=middle,
domain=0:1,
variable=\t,
no marks,
samples=24,
smooth,
]
%
% Isochoric process, halving temperature
\addplot (0.25, 0.75-0.5*t);
\begin{scope}[current plot style]
\fill (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};
\end{scope}
%
% Isothermal process, halving pressure
\addplot (0.1875/(0.75-0.5*t), 0.75-0.5*t);
\begin{scope}[current plot style]
\fill (axis cs:0.75, 0.25) circle (2pt) node[below] {isothermal};
\end{scope}
%
% Isobaric process, doubling volume
\addplot (0.25+0.25*t, 0.75);
\begin{scope}[current plot style]
\fill (axis cs:0.5, 0.75) circle (2pt) node[below] {isobaric};
\end{scope}
%
\fill[black] (axis cs:0.25, 0.75) circle (2pt) node[above] {initial state};
\end{axis}
\end{tikzpicture}
\end{document}
我使用scope
s 使点和标签(等容、等压、等温)具有与最新图相同的颜色。我喜欢这种方法,因为它在数学上很优雅(时间参数化,而不仅仅是\draw
ing),并且我可以使用 pgfplots 的循环列表,而不必明确指定任何颜色。
但是,尽管输出正确,我还是收到以下错误消息三次:
! Package pgfkeys Error: I do not know the key '/tikz/current plot style' and I
am going to ignore it. Perhaps you misspelled it.
See the pgfkeys package documentation for explanation.
Type H <return> for immediate help.
...
l.28 \begin{scope}[current plot style]
如果我删除scope
s 或它们的参数,错误就会消失,但标签会变成黑色。
这是否与 pgfplots 手册(第 4.3 节“命令\addplot
:坐标输入”;第 42 页)中的声明有关,即“current plot style
只要路径尚未完成或未包含在相关误差线中,图例选项‘可用作 ’”?我不确定这是否意味着整个current plot style
样式仅在这种情况下可用,或者只是图例条目被限定为这样。
无论如何,我该怎么做才能纠正这个错误?
答案1
我不知道为什么当将 keycurrent plot style
作为选项给出时会产生错误scope
。据我所知,它应该可以正常工作,尤其是考虑到我的其余答案。
但是(我认为这更优雅)它做如果只是将其作为选项添加到 each 中\fill
,则有效,如下所示:
\fill[current plot style] (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};
这是完整的代码,编译时没有错误:
\documentclass[border=2pt]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
xmin=0, xmax=1,
ymin=0, ymax=1,
enlargelimits=true,
xtick=\empty, ytick=\empty,
xlabel={$V$},
ylabel={$p$},
axis lines=middle,
domain=0:1,
variable=\t,
no marks,
samples=24,
smooth,
]
%
% Isochoric process, halving temperature
\addplot (0.25, 0.75-0.5*t);
\fill[current plot style] (axis cs:0.25, 0.25) circle (2pt) node[below] {isochoric};
%
% Isothermal process, halving pressure
\addplot (0.1875/(0.75-0.5*t), 0.75-0.5*t);
\fill[current plot style] (axis cs:0.75, 0.25) circle (2pt) node[below] {isothermal};
%
% Isobaric process, doubling volume
\addplot (0.25+0.25*t, 0.75);
\fill[current plot style] (axis cs:0.5, 0.75) circle (2pt) node[below] {isobaric};
%
\fill[black] (axis cs:0.25, 0.75) circle (2pt) node[above] {initial state};
\end{axis}
\end{tikzpicture}
\end{document}