Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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?

share|improve this question

2 Answers 2

up vote 18 down vote accepted

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

tiger bar plot

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


\begin{document}
\begin{tikzpicture}
\begin{axis}[ybar, samples=10, enlarge y limits=upper, ymin=0]
\addplot +[
    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]
\addplot +[
    black,
    fill=yellow,
    every path/.style={
        postaction={
            nomorepostaction,
            pattern=north east lines
        }
    }
]{rnd};
\end{axis}

\end{tikzpicture}
\end{document}
share|improve this answer
    
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.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.