使用 Tikzpicture 添加线条周围的变化

使用 Tikzpicture 添加线条周围的变化

我使用 10 个坐标以 0.1 步长绘制了一条线,范围从 0 到 1。每个 Y 坐标都是一个平均值。我有每个平均值的方差,并想在描述方差的函数周围绘制一个填充区域。到目前为止,我的代码如下:

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{subfig}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\begin{document}
\begin{figure}[h!]
\begin{subfigure}[t]{0.82\textwidth}
      \resizebox{1\textwidth}{!}{%
        \begin{tikzpicture} 
          \begin{axis}[
          xmin=0, xmax=1.1,
          ymin=16.9, ymax=17.3,
          xlabel={x}, ylabel={y}, axis lines=left,
          xtick={0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1},
          xticklabels={0, , , , , 0.5, , , , , 1},
          ytick distance={0.1},
          xticklabel style={rotate=-0, yshift=-0.4ex},
          xlabel style={anchor=north},
          xmajorgrids=true,
          grid style=dashed,
          legend pos=outer north east,
          height=6cm, 
          ]
          \addplot coordinates { 
            (0,   17.2)
            (0.1, 16.91)
            (0.2, 17.04)
            (0.3, 17.26)
            (0.4, 17.11)
            (0.5, 17.08)
            (0.6, 17.11)
            (0.7, 17.24)
            (0.8, 17.23)
            (0.9, 17.16)
            (1,   17.22)
          };
          \end{axis} 
        \end{tikzpicture}
      }
      \caption{my cap}
      \end{subfigure}%
\end{figure}
\end{document}

例如,每个 Y 坐标的方差应为 0.1 到 0.3,可视化为函数/线周围的填充。我想指定方差,从而为 10 个点中的每一个单独指定函数周围的“管”的大小。如何实现这一点?我的方差值为:

(0,   0.03)
(0.1, 0.03)
(0.2, 0.06)
(0.3, 0.01)
(0.4, 0.02)
(0.5, 0.03)
(0.6, 0.05)
(0.7, 0.11)
(0.8, 0.04)
(0.9, 0.09)
(1,   0.05)

方差看起来应该类似于本例中的灰色填充区域: 例子

答案1

我解决了。使用坐标时,必须绘制两条新线并为其命名。一条用于方差/标准差的上限,一条用于下限。然后填充这些命名线之间的区域。加载包后,还需要两个命令才能实现此功能。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{subfig}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{intersections}   % added (!)
\usepgfplotslibrary{fillbetween} % added (!)

\begin{document}
\begin{figure}[h!]
\begin{subfigure}[t]{0.82\textwidth}
      \resizebox{1\textwidth}{!}{%
        \begin{tikzpicture} 
          \begin{axis}[
          xmin=0, xmax=1.1,
          ymin=16.9, ymax=17.3,
          xlabel={x}, ylabel={y}, axis lines=left,
          xtick={0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1},
          xticklabels={0, , , , , 0.5, , , , , 1},
          ytick distance={0.1},
          xticklabel style={rotate=-0, yshift=-0.4ex},
          xlabel style={anchor=north},
          xmajorgrids=true,
          grid style=dashed,
          legend pos=outer north east,
          height=6cm, 
          ]
          \addplot coordinates { 
            (0,   17.2)
            (0.1, 16.91)
            (0.2, 17.04)
            (0.3, 17.26)
            (0.4, 17.11)
            (0.5, 17.08)
            (0.6, 17.11)
            (0.7, 17.24)
            (0.8, 17.23)
            (0.9, 17.16)
            (1,   17.22)
          };
          \addplot[name path=down,color=blue!70] coordinates { 
            (0,   17.1)
            (0.1, 16.81)
            (0.2, 17.00)
            (0.3, 17.16)
            (0.4, 17.01)
            (0.5, 17.00)
            (0.6, 16.90)
            (0.7, 17.14)
            (0.8, 17.13)
            (0.9, 17.06)
            (1,   17.00)
          };
          \addplot[name path=up,color=blue!70] coordinates { 
            (0,   17.3)
            (0.1, 17.05)
            (0.2, 17.14)
            (0.3, 17.35)
            (0.4, 17.23)
            (0.5, 17.2)
            (0.6, 17.21)
            (0.7, 17.34)
            (0.8, 17.33)
            (0.9, 17.26)
            (1,   17.30)
          };
          \addplot[blue!50,fill opacity=0.4] fill between[of=down and up];
          \end{axis} 
        \end{tikzpicture}
      }
      \caption{my cap}
      \end{subfigure}%
\end{figure}
\end{document}

一个缺点是,这个解决方案一点也不简洁。但是,它给出了一个没有任何条形的漂亮绘图。我根据以下问题构建了解决方案:问题 1第二季度

结果,范围略有调整:

结果

相关内容