pgfplots:以不同方式对直方图中的单个列进行着色

pgfplots:以不同方式对直方图中的单个列进行着色

我有一个巨大的数据文件,想用直方图来可视化数据。我想将单个列的颜色与其他列不同。以下是文档中的一个示例(第 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}

相关内容