我正在尝试用所有标签和括号重新创建图像的这一部分(来自此网站)
\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 厘米。或者,您可以使用具有合理系数的选项。width
axis
width=10cm
scale
为了获取两个路径相交的坐标,您需要正确定位显示方差无法解释部分的括号,您可以使用该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}