heracho
heracho

Reputation: 610

hatch more than one data serie in a histogram

When I colored an histogram it accept a list for the different colors, however, for hatching it accept only one value.

This is the code:

import numpy as np
import matplotlib.pylab as plt


data = [np.random.rand(100) + 10 * i for i in range(3)]
ax1 = plt.subplot(111)

n, bins, patches = ax1.hist(data, 20, histtype='bar',
                        color=['0', '0.33', '0.66'],
                        label=['normal I', 'normal II', 'normal III'],
                        hatch= ['', 'o', '/'])

How can I have different hatch for the different series?

Upvotes: 5

Views: 1793

Answers (1)

wflynny
wflynny

Reputation: 18531

Unfortunately, it doesn't look like hist supports multiple hatches for multi-series plots. However, you can get around that with the following:

import numpy as np
import matplotlib.pylab as plt    

data = [np.random.rand(100) + 10 * i for i in range(3)]
ax1 = plt.subplot(111)

n, bins, patches = ax1.hist(data, 20, histtype='bar',
                        color=['0', '0.33', '0.66'],
                        label=['normal I', 'normal II', 'normal III'])

hatches = ['', 'o', '/']
for patch_set, hatch in zip(patches, hatches):
    for patch in patch_set.patches:
        patch.set_hatch(hatch)

The object patches returned by hist is a list of BarContainer objects, each of which holds a set of Patch objects (in BarContainer.patches). So you can access each patch object and set its hatch explicitly.

or as @MadPhysicist pointed out you can use plt.setp on each patch_set so the loop can be shortened to:

for patch_set, hatch in zip(patches, hatches):
    plt.setp(patch_set, hatch=hatch)

Upvotes: 12

Related Questions