我正在尝试在 LaTeX 中绘制下图,但我无论如何也找不到有效的数学函数。这是我的代码,下图是我想要实现的:
\begin{figure}
\centering
\begin{tikzpicture}
\def\myfirstfunction{(\x - 4.65) / ((\x - 4.65) * (\x + 0.35)) - 0.2}
\def\mysecondfunction{(\x - 6) / ((\x - 4.65) * (\x + 0.35)) - 0.2}
\begin{axis}[
xlabel={Volume},
ylabel={Pression},
axis lines=middle,
scaled ticks=false,
xtick=\empty, % Remove x-axis ticks
ytick=\empty, % Remove y-axis ticks
grid=none,
width=10cm,
height=8cm,
xmin=0, % Set x-axis minimum to 0
xmax=5, % Adjust domain to show only the first quadrant
ymin=0, % Set y-axis minimum to 0
ymax=2.5, % Adjust range to show only the first quadrant
xlabel style={at={(ticklabel* cs:1)},anchor=north west}, % Place xlabel to the bottom
ylabel style={at={(ticklabel* cs:1)},anchor=south east,rotate= 0} % Place ylabel to the left
]
\addplot[domain=0.1:5,samples=100,smooth,blue] {\myfirstfunction}; % Plot function
\addplot[domain=0.1:5,samples=100,smooth,magenta] {\mysecondfunction}; % Plot second function
\end{axis}
\end{tikzpicture}
\caption{Graph of $y = \frac{x - 4.65}{(x - 4.65)(x + 0.35)} - 0.2$ and $y = \frac{1}{x} + 1$ in the first quadrant}
\label{fig:graph}
\end{figure}
任何帮助是极大的赞赏
答案1
看起来你正在混合Tikz
和pgfplots
?
这是一种以高度控制的方式定性地绘制这些曲线的方法。基本思想:
- 只需画线,然后弯曲其中两条线即可
to[out=,in=]
- 使用自定义样式来简化工作和代码
让我们来看看一些细节。我建议在手册在平行下。
绘制线条
例如,x 轴从 (0,0) 开始\draw[->] (0,0) -- +(8,0);
,向一侧移动 +(8,0)。这是一个相对运动,在这种情况下,使用 (0,8) 没有任何区别。但是,一旦您的起点在其他地方,这是一个非常好的功能。
该选项[->]
只是说:“在两点之间画一条线,起点没有符号,终点有一个箭头。
一次性添加文本
Tikz 遵循路径概念。即,您以 开始路径,\
并以 结束路径;
中间的所有内容都是所谓的动作(做这个!) 。
因此将上面的命令扩展为
\draw[->] (0,0) -- +(8,0) node[anchor=north,yshift=-3mm]{Volume};
方法:
- 开始
\
(什么?)draw
- 连接点如前所述
[->]
- 当到达终点 (8,0) 时添加
node
- 不要将其位置参考到其中心(默认),而要使用其上边缘
anchor=north
- 也做一些
shifts
- 将一些文本放在其位置
{Volume}
- 终于结束这条路
;
曲线
其中两条只是直线,遵循与上述相同的方法。
另外两个是弯曲。为了便于控制,您可以用 替换 ,--
同时to[out=in=]
指定合适的角度。
再次,对于曲线文本,一些节点被添加到路径中。
样式/格式
将您需要的所有内容放在tikzpicture
环境的开始处;仅更改这里即可更改整个绘图:
\begin{tikzpicture}[
>={Stealth}, % nicer arrow tip
lw/.style ={line width=1.5pt}, % line width for all
isob/.style={dashed,draw=brown,lw}, % reusing line width lw
isom/.style={dotted,draw=blue,lw},
adia/.style={green,lw},
isot/.style={dashed,draw=blue!80!yellow!50,lw},
]
外表
使用类standalone
很有用,因为您可以单独生成这些绘图。在目标文档中,您可以使用\includgraphics
from 包将此图像作为矢量图形graphicx
包含。pdf
\documentclass[10pt,border=3mm,tikz]{standalone}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
>={Stealth}, % nicer arrow tip
lw/.style ={line width=1.5pt}, % line width for all
isob/.style={dashed,draw=brown,lw}, % reusing line width lw
isom/.style={dotted,draw=blue,lw},
adia/.style={green,lw},
isot/.style={dashed,draw=blue!80!yellow!50,lw},
]
% ~~~ a coordinate ~~~~
\coordinate (A) at (1.5,6.5);
% ~~~ axes ~~~~~~~~~~
\draw[->] (0,0) -- +(8,0) node[anchor=north,yshift=-3mm]{Volume};
\draw[->] (0,0) -- +(0,8) node[anchor=north east,xshift=-3mm]{Pressure};
% ~~~ curves ~~~~~~~~~~
\draw[isob] (A) -- +(5,0) node[anchor=south,pos=0.5]{isobaric};
\draw[isom] (A) -- +(0,-4.5) node[anchor=south west]{isometric};
\draw[adia] (A) to[out=-80,in=160]
+(3,-4.5) node[yshift=7mm,text=black]{adiabatic};
\draw[isot] (A) to[out=-60,in=170]
+(4.5,-3) node[text=black,yshift=8mm,xshift=-5mm]{isothermal};
\end{tikzpicture}
\end{document}