用户科林发布了关于如何创建boxplots
彼此属于的对的好方法。
最小工作示例(MWE):
\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{statistics}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
boxplot/draw direction=y,
ylabel={RMSE},
height=6cm,
ymin=0,ymax=7,
cycle list={{red},{blue}},
boxplot={
draw position={1/3 + floor(\plotnumofactualtype/2) + 1/3*mod(\plotnumofactualtype,2)},
%
box extend=0.3
},
x=2cm,
xtick={0,1,2,...,10},
x tick label as interval,
xticklabels={%
{dataset 1\\{\tiny disabled enabled}},%
{dataset 2\\{\tiny disabled enabled}},%
{dataset 3\\{\tiny disabled enabled}},%
{dataset 4\\{\tiny disabled enabled}},%
},
x tick label style={
text width=2.5cm,
align=center
},
]
\addplot
table[row sep=\\,y index=0] {
data\\
2.764\\
2.938\\
2.075\\
1.493\\
1.285\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.175\\
2.813\\
2.006\\
3.893\\
2.012\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.621\\
3.659\\
6.357\\
2.851\\
1.416\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.280\\
1.482\\
1.787\\
2.326\\
1.795\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.778\\
2.388\\
1.016\\
1.328\\
1.151\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.028\\
1.571\\
4.090\\
3.875\\
1.890\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.405\\
1.188\\
4.330\\
3.665\\
1.439\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.937\\
1.320\\
1.357\\
1.852\\
1.215\\
};
\end{axis}
\end{tikzpicture}
\end{document}
结果截图:
问题:
如您所见,boxplots
每个数据集(从数据集 1 到数据集 4)都有一对存在。
在保留boxplots
y 轴 1 中的“已禁用”类型的同时,如何boxplots
在另外的第二个 y 轴中绘制“已启用”类型?
我创建了以下代码来创建第二个 y 轴:
\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{statistics}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis y line*=left,
boxplot/draw direction=y,
ylabel={y-axis 1},
height=6cm,
ymin=0,ymax=7,
cycle list={{red},{blue}},
boxplot={
draw position={1/3 + floor(\plotnumofactualtype/2) + 1/3*mod(\plotnumofactualtype,2)},
box extend=0.3
},
x=2cm,
xtick={0,1,2,...,10},
x tick label as interval,
xticklabels={%
{dataset 1\\{\tiny disabled enabled}},%
{dataset 2\\{\tiny disabled enabled}},%
{dataset 3\\{\tiny disabled enabled}},%
{dataset 4\\{\tiny disabled enabled}},%
},
x tick label style={
text width=2.5cm,
align=center
},
]
\addplot
table[row sep=\\,y index=0] {
data\\
2.764\\
2.938\\
2.075\\
1.493\\
1.285\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.175\\
2.813\\
2.006\\
3.893\\
2.012\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.621\\
3.659\\
6.357\\
2.851\\
1.416\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.280\\
1.482\\
1.787\\
2.326\\
1.795\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.778\\
2.388\\
1.016\\
1.328\\
1.151\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.028\\
1.571\\
4.090\\
3.875\\
1.890\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.405\\
1.188\\
4.330\\
3.665\\
1.439\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.937\\
1.320\\
1.357\\
1.852\\
1.215\\
};
\end{axis}
\begin{axis}[
axis y line*=right,
axis x line=none,
boxplot/draw direction=y,
ylabel={y-axis 2},
height=6cm,
ymin=0,ymax=7,
cycle list={{red},{blue}},
boxplot={
draw position={1/3 + floor(\plotnumofactualtype/2) + 1/3*mod(\plotnumofactualtype,2)},
box extend=0.3
},
x=2cm,
xtick={0,1,2,...,10},
x tick label as interval,
xticklabels={%
{dataset 1},%
{dataset 2},%
{dataset 3},%
{dataset 4},%
},
x tick label style={
text width=2.5cm,
align=center
},
]
\addplot
table[row sep=\\,y index=0] {
data\\
2.764\\
2.938\\
2.075\\
1.493\\
1.285\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.175\\
2.813\\
2.006\\
3.893\\
2.012\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.621\\
3.659\\
6.357\\
2.851\\
1.416\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.280\\
1.482\\
1.787\\
2.326\\
1.795\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.778\\
2.388\\
1.016\\
1.328\\
1.151\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.028\\
1.571\\
4.090\\
3.875\\
1.890\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.405\\
1.188\\
4.330\\
3.665\\
1.439\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.937\\
1.320\\
1.357\\
1.852\\
1.215\\
};
\end{axis}
\end{tikzpicture}
\end{document}
结果截图:
- 我怎样才能将
boxplot
“启用”分离到 y 轴 2 中? - 我们赞赏所有的想法和解决方案,但不必重复使用上层代码。
答案1
怎么样
\documentclass[border=2mm]{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{statistics}
\pgfplotsset{compat=1.8}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
axis y line*=left,
boxplot/draw direction=y,
ylabel={y-axis 1},
height=6cm,
ymin=0,ymax=7,
cycle list={{red}},
boxplot={
draw position={0.3 + \plotnumofactualtype},
box extend=0.3
},
x=2cm,xmax=4.25,xmin=0,
xtick={0,1,2,...,5},
x tick label as interval,
xticklabels={%
{dataset 1\\{\tiny disabled enabled}},%
{dataset 2\\{\tiny disabled enabled}},%
{dataset 3\\{\tiny disabled enabled}},%
{dataset 4\\{\tiny disabled enabled}},%
},
x tick label style={
text width=2.5cm,
align=center
},
]
\addplot
table[row sep=\\,y index=0] {
data\\
2.764\\
2.938\\
2.075\\
1.493\\
1.285\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.175\\
2.813\\
2.006\\
3.893\\
2.012\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.621\\
3.659\\
6.357\\
2.851\\
1.416\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.280\\
1.482\\
1.787\\
2.326\\
1.795\\
};
\end{axis}
\begin{axis}[
axis y line*=right,
axis x line=none,
boxplot/draw direction=y,
ylabel={y-axis 2},
height=6cm,
ymin=0,ymax=7,
cycle list={{blue}},
boxplot={
draw position={0.7 + \plotnumofactualtype},
box extend=0.3
},
x=2cm,xmax=4.25,xmin=0,
xtick={0,1,2,...,4},
x tick label as interval,
xticklabels={%
{dataset 1},%
{dataset 2},%
{dataset 3},%
{dataset 4},%
},
x tick label style={
text width=2.5cm,
align=center
},
]
\addplot
table[row sep=\\,y index=0] {
data\\
2.778\\
2.388\\
1.016\\
1.328\\
1.151\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.028\\
1.571\\
4.090\\
3.875\\
1.890\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
1.405\\
1.188\\
4.330\\
3.665\\
1.439\\
};
\addplot
table[row sep=\\,y index=0] {
data\\
2.937\\
1.320\\
1.357\\
1.852\\
1.215\\
};
\end{axis}
\end{tikzpicture}
\end{document}