序言:我对 pgfplots、pgfplotstable、tikz 完全是个新手
我浏览了这篇文章如何绘制带有函数图的散点图?
我想要实现的是像这一。
我取得了多大的进展:
\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread{ % Read the data into a table macro
A B C D E F G H I
1.00 4.50 1.00 3.00 3.67 6.00 2.00 2.00 6.00
2.67 3.00 n.b. 3.00 2.67 6.00 5.00 2.50 5.00
3.67 4.50 1.00 3.00 3.00 5.00 n.b. 4.00 4.00
4.00 6.00 1.00 3.50 2.67 1.00 2.00 3.50 3.50
}\datatable
\begin{axis}[
title=Correlation A - B,
xlabel={A},
ylabel={B},
]
\addplot table [x=A, y=B, only marks] {\datatable};
\end{axis}
\begin{axis}[
title=Correlation A - E,
xlabel={A},
ylabel={E},
]
\addplot table [x=A, y=E, only marks] {\datatable};
\end{axis}
\end{tikzpicture}
\end{document}
但这两张桌子是叠放在一起的。
我还有一些问题:
- 我需要导入
pgfplots
AND吗pgfplotstable
?为什么? - 我应该使用类似的东西
\pgfplotsset{compat=1.15}
,不是吗?版本 1.3? - 还有其他
\addplot
有用的选项吗(scatter
,,scatter src=\thisrow{class}
......)? - 如何处理我的空值“nb”?(如何让这些被忽略)
- 为了节省一些空间,我希望我的标尺从 1 到 6,并且 x 标尺和 y 轴之间没有间隙(反之亦然)
答案1
问题 :
- 我是否需要导入 pgfplots 和 pgfplotstable?为什么?
嗯,这是两个不同的包。
使用 pgfplots 可以做很多事情,而不需要 pgfplotstable(反过来可能也一样)。
因此不自动加载这两个包是有意义的。
- 我应该使用类似 \pgfplotsset{compat=1.15} 的东西,不是吗?版本 1.3?
除非出现问题,否则只需使用\pgfplotsset{compat=1.15}
:最新版本。
- \addplot 还有其他有用的选项吗(scatter、scatter src=\thisrow{class},...)?
我认为这些图表看起来还不错。
- 如何处理我的空值“nb”?(如何让这些被忽略)
** 原始答案:** 仅使用数据而不进行任何更改似乎就可以解决问题。(不会,它会引发错误,可以忽略)
** 编辑:** 处理这些问题的正确方法是使用nan
不可用值。
- 为了节省一些空间,我希望我的标尺从 1 到 6,并且 x 标尺和 y 轴之间没有间隙(反之亦然)
抱歉,不明白这个问题。
看看设置是否xmax = 6
符合您的要求。
输出
这是使用groupplots
库。如手册中所述,不使用库也可以完成相同的操作(搜索groupplots
)。
代码
\documentclass[12pt,tikz]{standalone}
\usepackage{pgfplots, pgfplotstable}
\pgfplotsset{compat=1.15}
\usepgfplotslibrary{groupplots}
\begin{document}
\begin{tikzpicture}
\pgfplotstableread
{ % Read the data into a table macro
A B C D E F G H I
1.00 4.50 1.00 3.00 3.67 6.00 2.00 2.00 6.00
2.67 3.00 nan 3.00 2.67 6.00 5.00 2.50 5.00
3.67 4.50 1.00 3.00 3.00 5.00 nan 4.00 4.00
4.00 6.00 1.00 3.50 2.67 1.00 2.00 3.50 3.50
}\datatable
\begin{groupplot}
[
group style=
{
group size = 1 by 2,
xlabels at=edge bottom,
vertical sep = 1.5cm,
},
xmin = 1, xmax = 6,
xlabel = {A},
]
\nextgroupplot
[
title=Correlation A - G,
ylabel={G},
]
\addplot table [x=A, y=G, only marks] {\datatable};
\nextgroupplot
[
title=Correlation A - E,
ylabel={E},
]
\addplot table [x=A, y=E, only marks] {\datatable};
\end{groupplot}
\end{tikzpicture}
\end{document}
答案2
您也是 R 语言的新手吗?对于统计图表,最简单的选择通常是使用 knitr
(R 库)进行 R/LaTeX 集成。如果您对此一无所知但愿意尝试,请安装 R,使用 .Rnw 扩展名保存此示例,使用 RStudio 编辑器打开文件并单击编译按钮。
\documentclass[12pt,twocolumn]{article}
\begin{document}
<<echo=F, dev="tikz", fig.cap="Example correlation", out.width='\\linewidth'>>=
x <- read.table(textConnection(
"A B C D E F G H I
1.00 4.50 1.00 3.00 3.67 6.00 2.00 2.00 6.00
2.67 3.00 n.b. 3.00 2.67 6.00 5.00 2.50 5.00
3.67 4.50 1.00 3.00 3.00 5.00 n.b. 4.00 4.00
4.00 6.00 1.00 3.50 2.67 1.00 2.00 3.50 3.50
"),header=T,na.strings = "n.b.")
with(x,plot(A,H,
ylim=c(1,6),xlim=c(1,6), # limits (optional)
col="blue",pch=19,cex=1.5,cex.lab=1.5,cex.axis=1.5 # more options
))
@
\end{document}
采用这种方法的另一个原因是,您可能希望做更多的事情,用这些数据呈现图形,例如,在文本中显示这种相关性的重要性。
通常只是复制并粘贴用SPSS,STATA,SAS或其他统计程序获得的p值,但如果乳胶表中的数据发生变化,p值将会过时,因此您将更改统计程序中的数据,进行相关性测试,然后再次复制并粘贴。
但是使用这种方法,在 R 块(仅带有“@”的行)结束后,您可以插入:
The A-H correlation is not significant (p=\Sexpr{with(x,cor.test(A,H))$p.value})
这将产生:
AH 相关性不显著 (p=0.09641)
然后,无论 .Rnw 中的数据表如何变化,图表和文本中的意义级别都将始终自动更新。在大型项目中,这会有很大帮助。