我有一个巨大的数据文件,想用直方图来可视化数据。我想将单个列的颜色与其他列不同。以下是文档中的一个示例(第 5.11.2 节“直方图”):
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{pgfplots.statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar interval,
xticklabel=
\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick
]
\addplot+[hist={bins=3}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\end{axis}
\end{tikzpicture}
\end{document}
我得到:
现在我想手动决定哪一列要用不同的颜色(用 Paint 完成...):
有人知道吗?对于普通图,只需将两个图放在一个图中即可。但在这里我不知道该怎么做。
这也许有关的。
答案1
当然可以制作宏来自动化该过程:
\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\usetikzlibrary{pgfplots.statistics}
\begin{document}
\begin{tikzpicture}
\begin{axis}[
ybar interval,
xticklabel=
\pgfmathprintnumber\tick--\pgfmathprintnumber\nexttick
]
\addplot+[hist={bins=3}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[ybar interval,
xtick=data,
xticklabel interval boundaries,
]
\addplot+[hist={bins=3}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\end{axis}
\begin{axis}[ybar interval,
ticklabel style={opacity=0},
hist/data min={1},
hist/data max={4}
]
% 1-4 4-7 7-10
\addplot+[hist={bins=1,
data filter/.code={%
\pgfmathparse{#1<4 ? #1 : "nan"}}
}
]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\addplot+[hist={bins=1,
data filter/.code={%
\pgfmathparse{and(#1>=4,#1<7) ? #1 : "nan"}},
},
style={draw=blue,fill=red!35}
]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\pgfplotsset{cycle list shift=-2}
\addplot+[hist={bins=1,
data filter/.code={%
\pgfmathparse{#1>=7 ? #1 : "nan"}}
}
]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\end{axis}
\end{tikzpicture}
\end{document}