How to combine fill and pattern in a pgfplot bar plot?

Is it possible to combine a TikZ pattern with a background of a chosen color?

\addplot[black,fill=yellow,pattern=north east lines] ...


yields bars which have black stripes on white (transparent?) background, whereas

\addplot[black,pattern=north east lines,fill=yellow] ...


yields bars which are plain yellow with not stripes at all. Any chance of getting tiger-like bars (black stripes on yellow) without defining an inherently-colored pattern by hand?

-

You can use a postaction to draw the pattern after the yellow background.

\documentclass[12pt]{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{patterns}

\begin{document}
\begin{tikzpicture}
\begin{axis}[ybar, samples=10, enlarge y limits=upper, ymin=0]
black,
fill=yellow,
postaction={
pattern=north east lines
}
]{rnd};
\end{axis}

\end{tikzpicture}
\end{document}


In older versions of PGFfplots, you needed to use every path to apply the pattern.

In order to apply the postaction, you can use every path/.style={postaction={...}}. This requires that you clear the postaction, e.g. using the approach given in Applying a postaction to every path in TikZ, as otherwise you get an infinite recursion.

\documentclass[12pt]{article}
\usepackage{pgfplots}
\usepackage{tikz}
\usetikzlibrary{patterns}

\makeatletter
\tikzset{nomorepostaction/.code=\let\tikz@postactions\pgfutil@empty}
\makeatother

\begin{document}
\begin{tikzpicture}
\begin{axis}[ybar, samples=10]
black,
fill=yellow,
every path/.style={
postaction={
nomorepostaction,
pattern=north east lines
}
}
]{rnd};
\end{axis}

\end{tikzpicture}
\end{document}

-
Works like a charm. :-) –  Andreas Aug 8 '11 at 7:29
This doesn't work anymore with the latest version? –  Mobius Pizza Jan 23 '12 at 10:49
@MobiusPizza: It does for me (with version 1.5.1). I forgot the \end{document} in my example, so maybe that's what caused the failure for you? –  Jake Jan 23 '12 at 11:04
@Jake I can confirm that indeed the new version does not render the patterns. –  percusse Apr 20 '12 at 19:12
@percusse: You're right, the new version doesn't seem to need the every path approach any more. I've edited my answer. –  Jake Apr 20 '12 at 19:57

I think the answer is yes: by two separate path instructions with the same path: one without pattern but with fill color and one with the chosen pattern.

In terms of the \addplot command of pgfplots: two separate \addplot commands, one with \addplot[fill,forget plot,...] and one with the pattern. The forget plot tells pgfplots to avoid legend entries for the plot.

If this appears to be unsuitable, you may want to look into decorations - perhaps they support such a thing.

-