PGFpots 标记两个轴的问题

PGFpots 标记两个轴的问题

我对这段代码有疑问:

\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
%xtick={0,1,...,10},
ytick={0,1*pi,...,3*pi},
domain=0:3*pi,
%scaled y ticks={real:3.1415},
ytick scale label code/.code={$\cdot Q$},]
\addplot[domain=0:1, samples=100, color=blue]({x},{2*pi});
\addplot[domain=1:10, samples=100, color=red]({x},{2*pi/x});
\end{axis}
\end{tikzpicture}
\end{center}

\end{document}

我想要这样的东西:

PGFPlot 正确

我想取消 y 轴上的 3.14 和 6.28 值,并用“$Q$”替换 6.28 值,此外,我想取消 x 轴上的所有值,并在红色函数的开头与蓝线的结尾对应处插入“$R$”。我还想改善图表中的空间,我的意思是,3.14 和 6.28 之间的空间太宽了。可以吗?

第一次编辑:我尝试编辑我的代码

\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}
\usepackage{mathtools}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
axis lines = center,
xlabel = $r$,
ylabel = $u$,
xtick={5},
xticklabel={$R$},
ytick={0,2*pi},
domain=0:3, y domain=0:10,
%scaled y ticks={real:3.1415},
%ytick scale label code/.code={$\cdot \pi$},
yticklabel={$\dfrac{Q}{R}$}]
\addplot[domain=0:5, samples=100, color=blue]({x},{2*pi});
\addlegendentry{$\dfrac{Q}{R}$}
\addplot[domain=0:10, samples=100, color=white]({x},{x});
\addlegendentry{}
\addplot[domain=5:15, samples=100, color=red]({x},{10*pi/x});
\addlegendentry{$\dfrac{Q}{r}$}
\addplot[domain=0:10, samples=100, color=white]({x},{x});
\addlegendentry{}
\end{axis}
\end{tikzpicture}
\end{center}

\end{document}

现在,我的最后一个问题是如何尽可能缩短垂直轴并延长水平轴。我该怎么做?再次感谢

答案1

您可以使用 xmax= 和 ymax= 定义轴的长度

\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
\pgfplotsset{width=10cm,compat=1.9}
\usepackage{mathtools}
\begin{document}
\begin{center}
\begin{tikzpicture}
\begin{axis}[
axis lines = center,
xlabel = $r$,
ylabel = $u$,
xtick={5},
xticklabel={$R$},
ytick={0,2*pi},
xmax=30pt,
ymax=8pt,
domain=0:3, y domain=0:10,
%scaled y ticks={real:3.1415},
%ytick scale label code/.code={$\cdot \pi$},
yticklabel={$\dfrac{Q}{R}$}]
\addplot[domain=0:5, samples=100, color=blue]({x},{2*pi});
\addlegendentry{$\dfrac{Q}{R}$}
\addplot[domain=0:10, samples=100, color=white]({x},{x});
\addlegendentry{}
\addplot[domain=5:20, samples=100, color=red]({x},{10*pi/x});
\addlegendentry{$\dfrac{Q}{r}$}
\addplot[domain=0:10, samples=100, color=white]({x},{x});
\addlegendentry{}
\end{axis}
\end{tikzpicture}
\end{center}

\end{document}

在此处输入图片描述

答案2

  • 抱歉,但您的问题不太清楚。
  • 你为什么使用这么旧的pgfplots版本?最新的是 1.18!
  • 第二个 MWE 不重现第一个图像。这是否意味着您在寻找其他图像?
  • 您说的“3.14 和 6.28 之间的间距太宽”是什么意思?它由使用的功能和图表高度定义。那么,您想降低图表高度吗?...

我猜,你正在追求这样的事情:

在此处输入图片描述

\documentclass{article}
%\documentclass[margin=3mm]{standalone}
\usepackage{mathtools}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18,   % <---
             height=5cm,    % <--- 
             width=10cm}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[
    axis lines = center,
    xlabel = $r$, 
    ylabel = $u$, ymin=0, ymax=3*pi,    % <---
    xtick = \empty,                     % <---
    extra x ticks={0,5},                % <---
    extra x tick labels={0, $R$},       % <---
    ytick={0,2*pi},
    yticklabel={$\dfrac{Q}{R}$},
    samples=100, no marks,              % <---
    every axis plot post/.append style={very thick} % <---
            ]
\addplot +[domain=0:5]  {2*pi};         % <---
\addplot +[domain=5:15] {10*pi/x};      % <---
    \legend{Q/R, Q/r}                   % <---
\end{axis}
    \end{tikzpicture}
\end{document}
  • 我的 MWE 与您的第二个 MWE 相比的所有更改均由% <---
  • 如果提出的解决方案不能解决您的问题,至少您的 MWE 中不会出现(大量)混乱。

答案3

我认为这是最好的解决方案,或者至少这个解决方案解决了我的问题

\documentclass{article}
\usepackage[margin=0.25in]{geometry}
\usepackage{pgfplots}
%\pgfplotsset{width=10cm,compat=1.1.8}
\usepackage{mathtools}
\begin{document}
\begin{center}
\begin{tikzpicture}
\pgfplotsset{compat=1.18, height=5cm, width=15cm}
\begin{axis}[
    axis lines = center,
    xlabel = $r$, 
    ylabel = $u$, ymin=0, ymax=3*pi,
    xtick = \empty,
    extra x ticks={0,5},
    extra x tick labels={0, $R$},
    ytick={0,2*pi},
    yticklabel={$\dfrac{Q}{R}$},
    samples=100, no marks,
    every axis plot post/.append style={very thick}
    ]
\addplot[domain=0:5, samples=100, color=blue]({x},{2*pi});
\addlegendentry[text width=10pt,text depth=9pt] {$\dfrac{Q}{R}$}
\addplot[domain=5:20, samples=100, color=red]({x},{10*pi/x});
\addlegendentry[text width=10pt,text depth=8pt] {$\dfrac{Q}{r}$}
\end{axis}
\end{tikzpicture}
\end{center}

\end{document}

如果您认为此解决方案可以改进,请您发布另一个解决方案。非常感谢。

相关内容