绘制类似于 ggplot2 中的 facet_wrap 的 pgfplots 图形

绘制类似于 ggplot2 中的 facet_wrap 的 pgfplots 图形

我需要绘制一个 2x2 的图形网格,如下所示:

在此处输入图片描述

笔记:上面的图表是使用ggplot2统计编程语言库生成的R. 图表取自关联

以下是四个数据文件:

tips-fri.csv

totalbill,tip,sex,smoker,day,time,size
28.97,3,Male,Yes,Fri,Dinner,2
22.49,3.5,Male,No,Fri,Dinner,2
5.75,1,Female,Yes,Fri,Dinner,2
16.32,4.3,Female,Yes,Fri,Dinner,2
22.75,3.25,Female,No,Fri,Dinner,2
40.17,4.73,Male,Yes,Fri,Dinner,4
27.28,4,Male,Yes,Fri,Dinner,2
12.03,1.5,Male,Yes,Fri,Dinner,2
21.01,3,Male,Yes,Fri,Dinner,2
12.46,1.5,Male,No,Fri,Dinner,2
11.35,2.5,Female,Yes,Fri,Dinner,2
15.38,3,Female,Yes,Fri,Dinner,2
12.16,2.2,Male,Yes,Fri,Lunch,2
13.42,3.48,Female,Yes,Fri,Lunch,2
8.58,1.92,Male,Yes,Fri,Lunch,1
15.98,3,Female,No,Fri,Lunch,3
13.42,1.58,Male,Yes,Fri,Lunch,2
16.27,2.5,Female,Yes,Fri,Lunch,2
10.09,2,Female,Yes,Fri,Lunch,2

tips-sat.csv

totalbill,tip,sex,smoker,day,time,size
20.65,3.35,Male,No,Sat,Dinner,3
17.92,4.08,Male,No,Sat,Dinner,2
20.29,2.75,Female,No,Sat,Dinner,2
15.77,2.23,Female,No,Sat,Dinner,2
39.42,7.58,Male,No,Sat,Dinner,4
19.82,3.18,Male,No,Sat,Dinner,2
17.81,2.34,Male,No,Sat,Dinner,4
13.37,2,Male,No,Sat,Dinner,2
12.69,2,Male,No,Sat,Dinner,2
21.7,4.3,Male,No,Sat,Dinner,2
19.65,3,Female,No,Sat,Dinner,2
9.55,1.45,Male,No,Sat,Dinner,2
18.35,2.5,Male,No,Sat,Dinner,4
15.06,3,Female,No,Sat,Dinner,2
20.69,2.45,Female,No,Sat,Dinner,4
17.78,3.27,Male,No,Sat,Dinner,2
24.06,3.6,Male,No,Sat,Dinner,3
16.31,2,Male,No,Sat,Dinner,3
16.93,3.07,Female,No,Sat,Dinner,3
18.69,2.31,Male,No,Sat,Dinner,3
31.27,5,Male,No,Sat,Dinner,3
16.04,2.24,Male,No,Sat,Dinner,3
38.01,3,Male,Yes,Sat,Dinner,4
26.41,1.5,Female,No,Sat,Dinner,2
11.24,1.76,Male,Yes,Sat,Dinner,2
48.27,6.73,Male,No,Sat,Dinner,4
20.29,3.21,Male,Yes,Sat,Dinner,2
13.81,2,Male,Yes,Sat,Dinner,2
11.02,1.98,Male,Yes,Sat,Dinner,2
18.29,3.76,Male,Yes,Sat,Dinner,4
17.59,2.64,Male,No,Sat,Dinner,3
20.08,3.15,Male,No,Sat,Dinner,3
16.45,2.47,Female,No,Sat,Dinner,2
3.07,1,Female,Yes,Sat,Dinner,1
20.23,2.01,Male,No,Sat,Dinner,2
15.01,2.09,Male,Yes,Sat,Dinner,2
12.02,1.97,Male,No,Sat,Dinner,2
17.07,3,Female,No,Sat,Dinner,3
26.86,3.14,Female,Yes,Sat,Dinner,2
25.28,5,Female,Yes,Sat,Dinner,2
14.73,2.2,Female,No,Sat,Dinner,2
10.51,1.25,Male,No,Sat,Dinner,2
17.92,3.08,Male,Yes,Sat,Dinner,2
44.3,2.5,Female,Yes,Sat,Dinner,3
22.42,3.48,Female,Yes,Sat,Dinner,2
20.92,4.08,Female,No,Sat,Dinner,2
15.36,1.64,Male,Yes,Sat,Dinner,2
20.49,4.06,Male,Yes,Sat,Dinner,2
25.21,4.29,Male,Yes,Sat,Dinner,2
18.24,3.76,Male,No,Sat,Dinner,2
14.31,4,Female,Yes,Sat,Dinner,2
14,3,Male,No,Sat,Dinner,2
7.25,1,Female,No,Sat,Dinner,1
10.59,1.61,Female,Yes,Sat,Dinner,2
10.63,2,Female,Yes,Sat,Dinner,2
50.81,10,Male,Yes,Sat,Dinner,3
15.81,3.16,Male,Yes,Sat,Dinner,2
26.59,3.41,Male,Yes,Sat,Dinner,3
38.73,3,Male,Yes,Sat,Dinner,4
24.27,2.03,Male,Yes,Sat,Dinner,2
12.76,2.23,Female,Yes,Sat,Dinner,2
30.06,2,Male,Yes,Sat,Dinner,3
25.89,5.16,Male,Yes,Sat,Dinner,4
48.33,9,Male,No,Sat,Dinner,4
13.27,2.5,Female,Yes,Sat,Dinner,2
28.17,6.5,Female,Yes,Sat,Dinner,3
12.9,1.1,Female,Yes,Sat,Dinner,2
28.15,3,Male,Yes,Sat,Dinner,5
11.59,1.5,Male,Yes,Sat,Dinner,2
7.74,1.44,Male,Yes,Sat,Dinner,2
30.14,3.09,Female,Yes,Sat,Dinner,4
20.45,3,Male,No,Sat,Dinner,4
13.28,2.72,Male,No,Sat,Dinner,2
22.12,2.88,Female,Yes,Sat,Dinner,2
24.01,2,Male,Yes,Sat,Dinner,4
15.69,3,Male,Yes,Sat,Dinner,3
11.61,3.39,Male,No,Sat,Dinner,2
10.77,1.47,Male,No,Sat,Dinner,2
15.53,3,Male,Yes,Sat,Dinner,2
10.07,1.25,Male,No,Sat,Dinner,2
12.6,1,Male,Yes,Sat,Dinner,2
32.83,1.17,Male,Yes,Sat,Dinner,2
35.83,4.67,Female,No,Sat,Dinner,3
29.03,5.92,Male,No,Sat,Dinner,3
27.18,2,Female,Yes,Sat,Dinner,2
22.67,2,Male,Yes,Sat,Dinner,2
17.82,1.75,Male,No,Sat,Dinner,2

tips-sun.csv

totalbill,tip,sex,smoker,day,time,size
16.99,1.01,Female,No,Sun,Dinner,2
10.34,1.66,Male,No,Sun,Dinner,3
21.01,3.5,Male,No,Sun,Dinner,3
23.68,3.31,Male,No,Sun,Dinner,2
24.59,3.61,Female,No,Sun,Dinner,4
25.29,4.71,Male,No,Sun,Dinner,4
8.77,2,Male,No,Sun,Dinner,2
26.88,3.12,Male,No,Sun,Dinner,4
15.04,1.96,Male,No,Sun,Dinner,2
14.78,3.23,Male,No,Sun,Dinner,2
10.27,1.71,Male,No,Sun,Dinner,2
35.26,5,Female,No,Sun,Dinner,4
15.42,1.57,Male,No,Sun,Dinner,2
18.43,3,Male,No,Sun,Dinner,4
14.83,3.02,Female,No,Sun,Dinner,2
21.58,3.92,Male,No,Sun,Dinner,2
10.33,1.67,Female,No,Sun,Dinner,3
16.29,3.71,Male,No,Sun,Dinner,3
16.97,3.5,Female,No,Sun,Dinner,3
17.46,2.54,Male,No,Sun,Dinner,2
13.94,3.06,Male,No,Sun,Dinner,2
9.68,1.32,Male,No,Sun,Dinner,2
30.4,5.6,Male,No,Sun,Dinner,4
18.29,3,Male,No,Sun,Dinner,2
22.23,5,Male,No,Sun,Dinner,2
32.4,6,Male,No,Sun,Dinner,4
28.55,2.05,Male,No,Sun,Dinner,3
18.04,3,Male,No,Sun,Dinner,2
12.54,2.5,Male,No,Sun,Dinner,2
10.29,2.6,Female,No,Sun,Dinner,2
34.81,5.2,Female,No,Sun,Dinner,4
9.94,1.56,Male,No,Sun,Dinner,2
25.56,4.34,Male,No,Sun,Dinner,4
19.49,3.51,Male,No,Sun,Dinner,2
38.07,4,Male,No,Sun,Dinner,3
23.95,2.55,Male,No,Sun,Dinner,2
25.71,4,Female,No,Sun,Dinner,3
17.31,3.5,Female,No,Sun,Dinner,2
29.93,5.07,Male,No,Sun,Dinner,4
14.07,2.5,Male,No,Sun,Dinner,2
13.13,2,Male,No,Sun,Dinner,2
17.26,2.74,Male,No,Sun,Dinner,3
24.55,2,Male,No,Sun,Dinner,4
19.77,2,Male,No,Sun,Dinner,4
29.85,5.14,Female,No,Sun,Dinner,5
48.17,5,Male,No,Sun,Dinner,6
25,3.75,Female,No,Sun,Dinner,4
13.39,2.61,Female,No,Sun,Dinner,2
16.49,2,Male,No,Sun,Dinner,4
21.5,3.5,Male,No,Sun,Dinner,4
12.66,2.5,Male,No,Sun,Dinner,2
16.21,2,Female,No,Sun,Dinner,3
13.81,2,Male,No,Sun,Dinner,2
17.51,3,Female,Yes,Sun,Dinner,2
24.52,3.48,Male,No,Sun,Dinner,3
20.76,2.24,Male,No,Sun,Dinner,2
31.71,4.5,Male,No,Sun,Dinner,4
7.25,5.15,Male,Yes,Sun,Dinner,2
31.85,3.18,Male,Yes,Sun,Dinner,2
16.82,4,Male,Yes,Sun,Dinner,2
32.9,3.11,Male,Yes,Sun,Dinner,2
17.89,2,Male,Yes,Sun,Dinner,2
14.48,2,Male,Yes,Sun,Dinner,2
9.6,4,Female,Yes,Sun,Dinner,2
34.63,3.55,Male,Yes,Sun,Dinner,2
34.65,3.68,Male,Yes,Sun,Dinner,4
23.33,5.65,Male,Yes,Sun,Dinner,2
45.35,3.5,Male,Yes,Sun,Dinner,3
23.17,6.5,Male,Yes,Sun,Dinner,4
40.55,3,Male,Yes,Sun,Dinner,2
20.69,5,Male,No,Sun,Dinner,5
20.9,3.5,Female,Yes,Sun,Dinner,3
30.46,2,Male,Yes,Sun,Dinner,5
18.15,3.5,Female,Yes,Sun,Dinner,3
23.1,4,Male,Yes,Sun,Dinner,3
15.69,1.5,Male,Yes,Sun,Dinner,2

tips-thur.csv

totalbill,tip,sex,smoker,day,time,size
27.2,4,Male,No,Thur,Lunch,4
22.76,3,Male,No,Thur,Lunch,2
17.29,2.71,Male,No,Thur,Lunch,2
19.44,3,Male,Yes,Thur,Lunch,2
16.66,3.4,Male,No,Thur,Lunch,2
10.07,1.83,Female,No,Thur,Lunch,1
32.68,5,Male,Yes,Thur,Lunch,2
15.98,2.03,Male,No,Thur,Lunch,2
34.83,5.17,Female,No,Thur,Lunch,4
13.03,2,Male,No,Thur,Lunch,2
18.28,4,Male,No,Thur,Lunch,2
24.71,5.85,Male,No,Thur,Lunch,2
21.16,3,Male,No,Thur,Lunch,2
10.65,1.5,Female,No,Thur,Lunch,2
12.43,1.8,Female,No,Thur,Lunch,2
24.08,2.92,Female,No,Thur,Lunch,4
11.69,2.31,Male,No,Thur,Lunch,2
13.42,1.68,Female,No,Thur,Lunch,2
14.26,2.5,Male,No,Thur,Lunch,2
15.95,2,Male,No,Thur,Lunch,2
12.48,2.52,Female,No,Thur,Lunch,2
29.8,4.2,Female,No,Thur,Lunch,6
8.52,1.48,Male,No,Thur,Lunch,2
14.52,2,Female,No,Thur,Lunch,2
11.38,2,Female,No,Thur,Lunch,2
22.82,2.18,Male,No,Thur,Lunch,3
19.08,1.5,Male,No,Thur,Lunch,2
20.27,2.83,Female,No,Thur,Lunch,2
11.17,1.5,Female,No,Thur,Lunch,2
12.26,2,Female,No,Thur,Lunch,2
18.26,3.25,Female,No,Thur,Lunch,2
8.51,1.25,Female,No,Thur,Lunch,2
10.33,2,Female,No,Thur,Lunch,2
14.15,2,Female,No,Thur,Lunch,2
16,2,Male,Yes,Thur,Lunch,2
13.16,2.75,Female,No,Thur,Lunch,2
17.47,3.5,Female,No,Thur,Lunch,2
34.3,6.7,Male,No,Thur,Lunch,6
41.19,5,Male,No,Thur,Lunch,5
27.05,5,Female,No,Thur,Lunch,6
16.43,2.3,Female,No,Thur,Lunch,2
8.35,1.5,Female,No,Thur,Lunch,2
18.64,1.36,Female,No,Thur,Lunch,3
11.87,1.63,Female,No,Thur,Lunch,2
9.78,1.73,Male,No,Thur,Lunch,2
7.51,2,Male,No,Thur,Lunch,2
19.81,4.19,Female,Yes,Thur,Lunch,2
28.44,2.56,Male,Yes,Thur,Lunch,2
15.48,2.02,Male,Yes,Thur,Lunch,2
16.58,4,Male,Yes,Thur,Lunch,2
7.56,1.44,Male,No,Thur,Lunch,2
10.34,2,Male,Yes,Thur,Lunch,2
43.11,5,Female,Yes,Thur,Lunch,4
13,2,Female,Yes,Thur,Lunch,2
13.51,2,Male,Yes,Thur,Lunch,2
18.71,4,Male,Yes,Thur,Lunch,3
12.74,2.01,Female,Yes,Thur,Lunch,2
13,2,Female,Yes,Thur,Lunch,2
16.4,2.5,Female,Yes,Thur,Lunch,2
20.53,4,Male,Yes,Thur,Lunch,4
16.47,3.23,Female,Yes,Thur,Lunch,3
18.78,3,Female,No,Thur,Dinner,2

这是我的最佳尝试和输出

\documentclass{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}

\pgfplotsset{compat=1.8}

\begin{document}
\begin{tikzpicture}
  \begin{groupplot}[
        group style={group size=2 by 2},
        ymin=0,ymax=0.75,]
    \nextgroupplot[title=Friday]
    \addplot+[only marks,mark=o] table [x=totalbill,y expr={\thisrow{tip} / \thisrow{totalbill}},col sep=comma]
        {tips-fri.csv};
    \nextgroupplot[title=Saturday]
    \addplot+[only marks,mark=o] table [x=totalbill,y expr={\thisrow{tip} / \thisrow{totalbill}},col sep=comma]
        {tips-sat.csv};
    \nextgroupplot[title=Sunday]
    \addplot+[only marks,mark=o] table [x=totalbill,y expr={\thisrow{tip} / \thisrow{totalbill}},col sep=comma]
        {tips-sun.csv};
    \nextgroupplot[title=Thursday]
    \addplot+[only marks,mark=o] table [x=totalbill,y expr={\thisrow{tip} / \thisrow{totalbill}},col sep=comma]
        {tips-thur.csv};
  \end{groupplot}
\end{tikzpicture}
\end{document}

在此处输入图片描述

改进空间

  • 如何让每个情节的标题更贴近相应的情节?
  • 如何将标题放在相应图上方的灰色矩形框中?
  • 如何插入 x 轴和 y 轴标签?
  • 绘图区域的背景需要为灰色,也不需要有帮助线。

答案1

(我使用随机数,因为我懒得保存你的四个数据文件。)这里有一个建议,

在此处输入图片描述

您的前两个要求可以通过更改来实现title style。这实际上将您定义的选项附加到创建标题的节点。添加一些负数yshift会使其更靠近轴,fill并添加背景颜色。您只需确保宽度与轴的宽度相同,因此将minimum width标题节点的设置为与轴的相同width,并scale only axis启用:

width=\myaxiswidth,
scale only axis,
title style={
   yshift=-6pt,
   fill=black!10,
   minimum width=\myaxiswidth},

这里\myaxiswidth定义为\newcommand\myaxiswidth{4cm}

轴标签可以相对于子图放置。每个轴将被赋予名称group cMrN,其中MN分别是列号和行号。使用该calc库,计算例如左上图的左下角和左下图的左上角之间的中点,并相对于此放置一个节点。其他轴类似:

\node [left=.7cm,anchor=south,rotate=90] at ($(group c1r1.south west)!0.5!(group c1r2.north west)$) {$x$-axis label};
\node [below=.6cm] at ($(group c1r2.south east)!0.5!(group c2r2.south west)$) {$y$-axis label};

这些分别放置在 的外面groupplot和 的里面tikzpicture

更改group style

group style={
      group size=2 by 2,
      x descriptions at=edge bottom,
      y descriptions at=edge left,
      horizontal sep=2pt,
      vertical sep=20pt},

使 xticks 只出现在底部,yticks 只出现在左侧,并改善间距。完整代码:

\documentclass[border=2mm]{standalone}

\usepackage{pgfplots}
\usepgfplotslibrary{groupplots}
\pgfplotsset{compat=1.8}

\usetikzlibrary{backgrounds,calc}
\newcommand\myaxiswidth{4cm}
\begin{document}
\begin{tikzpicture}
  \begin{groupplot}[
        group style={
            group size=2 by 2,
            x descriptions at=edge bottom,
            y descriptions at=edge left,
            horizontal sep=2pt,
            vertical sep=20pt},
         ymin=0,ymax=0.75,
         width=\myaxiswidth,
         scale only axis,
         title style={
            yshift=-6pt,
            fill=black!10,
            minimum width=\myaxiswidth},
         domain=0:45, %just for example
         samples=20 %just for example
         ]
    \nextgroupplot[title=Friday]
    \addplot[only marks,mark=o] {rnd};
    \nextgroupplot[title=Saturday]
    \addplot[only marks,mark=o] {rnd};
    \nextgroupplot[title=Sunday]
    \addplot[only marks,mark=o] {rnd};
    \nextgroupplot[title=Thursday]
    \addplot[only marks,mark=o] {rnd};
    \end{groupplot}

    \node [left=.7cm,anchor=south,rotate=90] at ($(group c1r1.south west)!0.5!(group c1r2.north west)$) {$x$-axis label};
   \node [below=.6cm] at ($(group c1r2.south east)!0.5!(group c2r2.south west)$) {$y$-axis label};
\end{tikzpicture}
\end{document}

相关内容