我制作了如下所示的图表来显示因变量的值的分布与自变量的变化。
\documentclass[varwidth]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepgfplotslibrary{fillbetween}
\usepackage{tikz}
\pgfplotstableread{
x min q1 med q3 max
1 0 2 4 6 8
2 2 4 5 6 8
3 1 3 5 7 9
}\data%
\begin{document}
\begin{tikzpicture}
\begin{axis}[title=Example,
xlabel=x,
ylabel=y,
]
\addplot[blue, dashed] table [x=x, y=min] {\data};
\addplot[blue, dotted, name path global=q1] table [x=x, y=q1] {\data};
\addplot[blue, solid] table [x=x, y=med] {\data};
\addplot[blue, dotted, name path global=q3] table [x=x, y=q3] {\data};
\addplot[blue, dashed] table [x=x, y=max] {\data};
\addplot[blue, fill opacity=0.3] fill between[of=q1 and q3];
\end{axis}
\end{tikzpicture}
\end{document}
我希望有这样一个传奇故事,
这可能吗?怎么做?
编辑:添加我的完整解决方案
这下面的解决方案得到了我想要的大部分内容,经过一些小修改,我就能完美地完成它。(嗯,下面的图片并不完美——我刚刚意识到我交换了 Q1 和 Q3。)
我将自定义图例条目的尺寸从 0.1 厘米增加到了 0.4 厘米,
\pgfplotsset{custom legend/.style={%
/pgfplots/legend image code/.code={%
\path[##1] (0cm,-.4cm) rectangle (0.6cm,0.4cm);
\draw[dotted] (0cm,-0.4cm) -- (0.6cm,-0.4cm)
(0cm,0.4cm) -- (0.6cm,0.4cm);
\draw[blue] (0cm,0cm) -- (0.6cm,0cm);
}}}
并将相应的图例条目设为三行,
\begin{axis}[title=Example,
xlabel=x,
ylabel=y,
legend style={cells={align=left}},
]
\addlegendimage{blue,dashed}
\addlegendentry[font=\sffamily]{Maximum}
\addlegendimage{custom legend,draw=none,fill=blue,fill opacity=0.3}
\addlegendentry[xshift=-2mm,font=\sffamily]{Q1 \\ Median \\ Q3}
\addlegendimage{blue,dashed}
\addlegendentry[xshift=-0.2mm,font=\sffamily]{Minimum}
...
答案1
这是一份提案。我查阅了area legend
并将pgfplots.code.tex
其作为 的基础custom legend
,我认为它已经接近你想要的了,并且可以进一步定制。(我很确定我见过使用类似技巧的答案,但即使经过长时间的搜索,我也找不到它。我绝对不是说我是第一个使用这些技巧的人。)无论如何,快速定制的结果是(经过长时间的搜索而没有找到结果)
\documentclass[varwidth]{standalone}
\usepackage{pgfplots}
\usepackage{pgfplotstable}
\usepgfplotslibrary{fillbetween}
\usepackage{tikz}
\pgfplotstableread{
x min q1 med q3 max
1 0 2 4 6 8
2 2 4 5 6 8
3 1 3 5 7 9
}\data%
\pgfplotsset{custom legend/.style={%
/pgfplots/legend image code/.code={%
\path[##1] (0cm,-0.1cm) rectangle (0.6cm,0.1cm);
\draw[dotted] (0cm,-0.1cm) -- (0.6cm,-0.1cm)
(0cm,0.1cm) -- (0.6cm,0.1cm);
\draw[blue] (0cm,0cm) -- (0.6cm,0cm);
}}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[title=Example,
xlabel=x,
ylabel=y,
]
\addlegendimage{blue,dashed}
\addlegendentry[font=\sffamily]{Maximum}
\addlegendimage{custom legend,draw=none,fill=blue,fill opacity=0.3}
\addlegendentry[xshift=-2mm,font=\sffamily]{Median}
\addlegendimage{blue,dashed}
\addlegendentry[xshift=-0.2mm,font=\sffamily]{Minimum}
\addplot[blue, dashed] table [x=x, y=min] {\data};
\addplot[blue, dotted, name path global=q1] table [x=x, y=q1] {\data};
\addplot[blue, solid] table [x=x, y=med] {\data};
\addplot[blue, dotted, name path global=q3] table [x=x, y=q3] {\data};
\addplot[blue, dashed] table [x=x, y=max] {\data};
\addplot[blue, fill opacity=0.3] fill between[of=q1 and q3];
\end{axis}
\end{tikzpicture}
\end{document}
经过一段时间的休眠后,如果需要的话,我会很乐意协助您进行进一步的定制。