我需要绘制一个 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
,其中M
和N
分别是列号和行号。使用该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}