多变量散点图

多变量散点图

序言:我对 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}

但这两张桌子是叠放在一起的。

我还有一些问题:

  1. 我需要导入pgfplotsAND吗pgfplotstable?为什么?
  2. 我应该使用类似的东西\pgfplotsset{compat=1.15},不是吗?版本 1.3?
  3. 还有其他\addplot有用的选项吗(scatter,,scatter src=\thisrow{class}......)?
  4. 如何处理我的空值“nb”?(如何让这些被忽略)
  5. 为了节省一些空间,我希望我的标尺从 1 到 6,并且 x 标尺和 y 轴之间没有间隙(反之亦然)

答案1

问题 :

  1. 我是否需要导入 pgfplots 和 pgfplotstable?为什么?

嗯,这是两个不同的包。

使用 pgfplots 可以做很多事情,而不需要 pgfplotstable(反过来可能也一样)。

因此不自动加载这两个包是有意义的。

  1. 我应该使用类似 \pgfplotsset{compat=1.15} 的东西,不是吗?版本 1.3?

除非出现问题,否则只需使用\pgfplotsset{compat=1.15}:最新版本。

  1. \addplot 还有其他有用的选项吗(scatter、scatter src=\thisrow{class},...)?

我认为这些图表看起来还不错。

  1. 如何处理我的空值“nb”?(如何让这些被忽略)

** 原始答案:** 仅使用数据而不进行任何更改似乎就可以解决问题。(不会,它会引发错误,可以忽略)

** 编辑:** 处理这些问题的正确方法是使用nan不可用值。

  1. 为了节省一些空间,我希望我的标尺从 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 中的数据表如何变化,图表和文本中的意义级别都将始终自动更新。在大型项目中,这会有很大帮助。

相关内容