在 tikz 中重新创建回归图

在 tikz 中重新创建回归图

我正在尝试用所有标签和括号重新创建图像的这一部分(来自此网站

在此处输入图片描述

\documentclass{article}
\usepackage{pgfplots} \pgfplotsset{compat=1.17}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}    
\begin{document}     
\begin{figure}
    \centering
    \begin{tikzpicture}
    \begin{axis}[
    xlabel={X},
    ylabel={Y},
    xmin=0, xmax=10,
    ymin=0, ymax=10,
    grid=both,
    axis lines=middle,
    every axis plot/.append style={ultra thick}
    ]   
    % Data points
    \addplot+[only marks] coordinates {
    (1, 3.5)
    (2, 5)
    (3, 4)
    (4, 6.3)
    (5, 8)
    (6, 7)
    (7, 9)
    (8, 9.5)
    (9, 12)
    (10, 11)
    };    
    % Regression line
    \addplot[red, domain=0:10, samples=100] { x + 2};
    % Vertical line
    \addplot[blue, dashed] coordinates {
    (5, 8)
    (5, 5.7) };
    %Mean Line
    \addplot[black,dashed]coordinates{
    (0,5.7)
    (10,5.7)   } node [left]{mean};
    % Curly bracket
    \draw [decorate,decoration={brace,amplitude=5pt},xshift=3pt,yshift=-5pt](5, 8) -- (5, {5 + 2}) node [midway, below, xshift=7pt] {unexplained variance};
    \end{axis}  
    \end{tikzpicture}
    \caption{Caption}
    \label{fig:enter-label}
\end{figure}   
\end{document}

我确实有图表的基本结构,但对标签和括号部分有点失望。我无法理清所有标签和注释。另外,有没有办法让图表“放大”以便可读?

答案1

我不知道你到底想要什么,但是你的图表越密集,定位所有标签的方式自然就越复杂,以便最终所有内容仍然可读。

我不确定您说的“放大”是什么意思,但您可以向环境添加height和选项,将图表缩放到指定大小。例如,将图表宽度缩放到 10 厘米。或者,您可以使用具有合理系数的选项。widthaxiswidth=10cmscale

为了获取两个路径相交的坐标,您需要正确定位显示方差无法解释部分的括号,您可以使用该intersections库。

为了更好地排列标签,您可能需要减小字体大小,这通常已经很有帮助了。至于括号,您可能需要镜像其中一些并更改选项aspect(以及pos标签节点的选项),以便稍微移动标签(它应该也可以不移动标签,我添加它只是为了以防万一您需要它,因为字体大小较大):

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots} 
\pgfplotsset{compat=1.17}
\usetikzlibrary{decorations.pathreplacing, intersections}

\begin{document}
    \begin{tikzpicture}
    \begin{axis}[
        xlabel={X},
        ylabel={Y},
        xmin=0, xmax=10,
        ymin=0, ymax=10,
        grid=both,
        axis lines=middle,
        every axis plot/.append style={ultra thick},
        font=\small
    ]   
    % Data points
    \addplot+[only marks] coordinates {
        (1, 3.5)
        (2, 5)
        (3, 4)
        (4, 6.3)
        (5, 8)
        (6, 7)
        (7, 9)
        (8, 9.5)
        (9, 12)
        (10, 11)
    };    
    % Regression line
    \addplot[red, domain=0:10, samples=100, name path=Regr] { x + 2 };
    % Vertical line
    \addplot[blue, dashed, name path=Vert] coordinates {
        (5, 8)
        (5, 5.7) 
    } coordinate[pos=0] (Vert top);
    % Mean Line
    \addplot[black, dashed] coordinates{
        (0, 5.7)
        (10, 5.7)   
    } node[below left] {mean};
    % Curly bracket
    \draw[name intersections={of=Regr and Vert}, decorate, decoration={brace, mirror, amplitude=4pt, aspect=0.33}, thick]
        ([xshift=-5pt]Vert top) -- ([xshift=-5pt]intersection-1) 
        node[pos=0.33, left, xshift=-3pt, text width=5em, align=right] {unexplained variance};
    \end{axis}  
    \end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

使用tzplot

在此处输入图片描述

\documentclass{standalone} 

\usepackage{tzplot}

\begin{document}

\begin{tikzpicture}[font=\scriptsize]
\tzaxes(13,13)
\tzticks<-2pt,-2pt>(0pt:4pt){2,4,...,12}(0pt:4pt){2,4,...,12}
% mean
\def\regmean{5.7}
\tzfn[dashed,ultra thick]\regmean[12:0]{mean}[ar]
% regression line
\def\regline{\x+2}
\tzfn[red,ultra thick]\regline[0:11]
% data
\tzplot*[blue](1,3.5)
              (2,5)
              (3,4)
              (4,6.3)
              (5,8)
              (6,7)
              (7,9)
              (8,9.5)
              (9,12)
              (10,11) ;
% explained / unexplained variation
\tzcoor(3,4)(Y){$y$}[l]
\tzvXpoint*[red]{regline}(Y)(Y^){$\hat y$}[180](4pt)
\tzvXpoint*[red]{regmean}(Y)(Y-){$\bar y$}[135](4pt)
\tzbrace[thick](Y-)([yshift=1pt]Y^)
        {explained varitaion\\$\hat y-\bar y$}[r=10pt,align=left]
\tzbrace[thick](Y^)(Y)
        {unexplained\\varitaion\\$y-\hat y$}[r=10pt,align=left]
\begin{pgfonlayer}{background}
  \tzline[blue](Y-)(Y)
\end{pgfonlayer}
\end{tikzpicture}

\end{document}

相关内容