使用 PGFPlots 绘制分段函数各部分的图例

使用 PGFPlots 绘制分段函数各部分的图例

我试图添加一个图例,标签将标记 tikzpicture 内部函数的所有三个部分,或者想办法在 tikzpicture 外部清晰地标记图形。我遵循了一点指导用于 tikz 中的分段函数。请注意,这是我正在进行的数学测试的一部分。这是我到目前为止的代码:

\documentclass{exam}
\usepackage[utf8]{inputenc}
\usepackage[10pt]{extsizes}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{pgfplots}
\pgfplotsset{my style/.append style={axis x line=middle, axis y line=
middle, xlabel={$x$}, ylabel={$y$}, axis equal }}

\setlength{\voffset}{-0.1in}
\setlength{\headsep}{5pt}
\geometry{height=9.1in}

\begin{document}
\begin{questions}
\begin{tikzpicture}
\begin{axis}[my style, minor tick num=1]
\addplot[domain=-5:-3] {x+3};
\addplot[domain=-3:1] {(4-(1+x)^2)^(1/2)};
\addplot[domain=1:5] {2*x^2/3-8*x/3};

\addplot[mark=*] coordinates {(1,-1)};
\addplot[mark=*,fill=white, only marks] coordinates {(1,-2)(1,0)};
\legend{y=x+3}
\end{axis}
\end{tikzpicture}


\end{questions}
\end{document}

图形

答案1

你的例子还是不能编译。我删除了不相关的包,用 class来用或standalone显示图片。tikzpgfplots

请注意包装上的警告并按照说明进行操作。

Package pgfplots Warning: running in backwards compatibility mode
(unsuitable tick labels; missing features). 
Consider writing \pgfplotsset{compat=1.17} into your preamble.

手册已在从到的pgfplots部分中展示了如何添加图例和自定义图例。4.9.4 Legends4.9.8

添加图例

您可以使用\addlegendentry\legend或 键legend entries来添加图例。

使用\addlegendentry,将每个放在\addledgendentry后面\addplot

\addlegendentry{$x+3$}
\addlegendentry{$\bigl(4-(1+x)^2\bigr)^{1/2}$}
\addlegendentry{$2x^2/3-8x/3$}

或者简单地

legend entries={$x+3$, $\bigl(4-(1+x)^2\bigr)^{1/2}$, $2x^2/3-8x/3$}
% or
\legend{$x+3$, $\bigl(4-(1+x)^2\bigr)^{1/2}$, $2x^2/3-8x/3$}

图例对齐和位置

第 4.9.5 节展示了如何改变图例的外观。

legend cell align=left,
legend pos=outer north east

将在轴线的东北外侧绘制一个左对齐的图例。

图例图像

您可以通过以下方式定制自己的图例图像样式legend image code/.codepgfplots已提供line legendempty legend等等area legend......)

  /pgfplots/line 1/.style={
    legend image code/.code={
      \draw[##1] (0cm, -0.3cm) -- (0.6cm, 0.3cm);
    }
  },
  /pgfplots/line 2/.style={
    legend image code/.code={
      \draw[##1] (0cm, 0cm) arc (180:0:0.3cm);
    }
  },
  /pgfplots/line 3/.style={
    legend image code/.code={
      \draw[##1] plot[smooth] coordinates {
        (0cm, 0cm) (0.2cm, -0.2cm) (0.6cm, 0.6cm)
      };
    }
  },

然后将这些样式应用到您的额外条目中\addlegendimage,因此您必须将这些条目放在每个之前\addplot

% extra legend entries
\addlegendimage{line 1}
\addlegendentry{$x+3$}
\addlegendimage{line 2}
\addlegendentry{$\bigl(4-(1+x)^2\bigr)^{1/2}$}
\addlegendimage{line 3}
\addlegendentry{$2x^2/3-8x/3$}

代码和结果

在此处输入图片描述

\documentclass[tikz, border=1cm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{
  compat=1.17,
  my style/.append style={
    axis x line=middle,
    axis y line=middle,
    xlabel={$x$},
    ylabel={$y$}, axis equal,
    legend cell align=left,
    legend pos=outer north east,
%     empty legend,
  },
  /pgfplots/line 1/.style={
    legend image code/.code={
      \draw[##1] (0cm, -0.3cm) -- (0.6cm, 0.3cm);
    }
  },
  /pgfplots/line 2/.style={
    legend image code/.code={
      \draw[##1] (0cm, 0cm) arc (180:0:0.3cm);
    }
  },
  /pgfplots/line 3/.style={
    legend image code/.code={
      \draw[##1] plot[smooth] coordinates {
        (0cm, 0cm) (0.2cm, -0.2cm) (0.6cm, 0.6cm)
      };
    }
  },
}

\begin{document}
\begin{tikzpicture}
\begin{axis}[my style, minor tick num=1]

% extra legend entries
\addlegendimage{line 1}
\addlegendentry{$x+3$}
\addlegendimage{line 2}
\addlegendentry{$\bigl(4-(1+x)^2\bigr)^{1/2}$}
\addlegendimage{line 3}
\addlegendentry{$2x^2/3-8x/3$}

\addplot[domain=-5:-3] {x+3};
\addplot[domain=-3:1] {(4-(1+x)^2)^(1/2)};
\addplot[domain=1:5] {2*x^2/3-8*x/3};
\addplot[mark=*] coordinates {(1,-1)};
\addplot[mark=*,fill=white, only marks] coordinates {(1,-2)(1,0)};
\end{axis}
\end{tikzpicture}
\end{document}

相关内容