# Matplotlib - Bar Chart - Part Two

Python Visualization Article Series

This is a multiple-parts article. There are few sections here.

Table of Content
Where to Discuss?

Local Group

### Preface

Goal: Plot a cumulative bar chart, for a good reason.

Have you ever have a very big sheets? when it somes to reporting, your boss might need a summary.

Just one page, and nothing more!

### 1: Simple Vertical Bar Chart

Always start from simple.

#### Variable Initialization

Consider start with subplot. Then make the bar chart, just for puppies.

``````import matplotlib.pyplot as plt
import numpy as np

from MyColors import material
from MyPopulation import breeds, stages, transpose

puppy  = transpose
width = 0.65`````` #### Vertical Plot

Consider start with subplot. Just a few line, and viola, a vertical bar chart.

``````axes = plt.subplot()

axes.bar(breeds, puppy, width,
color=material['blue500'], label='Puppy')

plt.show()``````

#### Vertical Decoration

Do not forget to add decoration as required. To find the right property attribute to suit your needs, you might involve trial and error process.

``````axes.set_ylabel('Population')
axes.set_title('Puppies')
axes.set_position([0.1, 0.3, 0.85, 0.6])
axes.set_ylim([-1, 11])

plt.xticks(rotation='vertical')
plt.show()`````` The result might about similar to below chart. ### 2: Simple Horizontal Bar Chart

We need to expereiment with different kind view.

#### Variable Initialization

Exactly the same with the simple vertical bar chart above.

#### Horizontal Plot

Just another subplot. But this time with `barh` equipped with `y_pos`.

``````axes = plt.subplot()
y_pos = np.arange(len(breeds))

axes.barh(y_pos, puppy, width,
color=material['blue500'], label='Puppy')

plt.show()``````

You can refer to official documentation to understand the `y_pos`.

#### Horizontal Decoration

It is slighly different with the vertical counterpart. Especially the `invert_yaxis()` part.

``````axes.set_yticks(y_pos, labels=breeds)
axes.invert_yaxis()
axes.set_xlabel('Population')
axes.set_title('Puppies')
axes.set_position([0.15, 0.1, 0.80, 0.8])
axes.set_xlim([-1, 11])

plt.show()`````` The result might about similar to below chart. ### 3: Cumulative Vertical Bar Chart

The dogs life cycle can be represented in cumulative value. So that we know the total sum of dog, that already pass a particular life cycle.

#### Variable Initialization

Consider start with subplot. Then make the bar chart, for all stages.

``````import matplotlib.pyplot as plt
import numpy as np

# variable initialization

from MyColors import material
from MyPopulation import breeds, stages, transpose

[puppy, junior, adult, mature] = transpose
width = 0.35`````` #### Vertical Plot

This time, we draw multiple barcharts. Each on upper side of each other, using the `bottom` parameter argument.

``````axes = plt.subplot()

axes.bar(breeds, puppy,  width,
color=material['blue500'],   label='Puppy')

axes.bar(breeds, junior, width,
color=material['cyan500'],   label='Junior',
bottom = puppy)

bottom = puppy + junior)

axes.bar(breeds, mature, width,
color=material['teal500'], label='Mature',
bottom = puppy + junior + adult)`````` Notice how we add the `bottom` parameter argument, cumulatively. This way, each vertical bar, do not overlap with each other.

#### Vertical Decoration

It is pretty similar with previous decoration. I also add `legend` to make the chart more informative.

``````axes.legend(
loc="upper left",
bbox_to_anchor=(1, 1, 0, 0))
axes.margins(x=0.1)

axes.set_ylabel('Population')
axes.set_title('Pet Stages')
axes.set_position([0.1, 0.3, 0.65, 0.6])
axes.set_ylim([-1, 25])

plt.xticks(rotation='vertical')
plt.show()`````` The result might about similar to below chart. I found that is not easy to read the dog breed name at the bottom. It is a kind of annoying, so I move on creating horizontal chart.

### 4: Cumulative Horizontal Bar Chart

This horizontal chart is easier to read. And also can hold more breed in portrait page.

#### Variable Initialization

Exactly the same with the Cumulative vertical bar chart above.

#### Horizontal Plot

Just multiple barcharts, using `barh` equipped with `y_pos`.

Each bar on right side of each other, using the `left` parameter argument.

``````axes = plt.subplot()
y_pos = np.arange(len(breeds))

axes.barh(y_pos, puppy, width,
color=material['blue500'],   label='Puppy')

axes.barh(y_pos, junior, width,
color=material['cyan500'],   label='Junior',
left = puppy)

left = puppy + junior)

axes.barh(y_pos, mature, width,
color=material['teal500'], label='Mature',
left = puppy + junior + adult)`````` Notice how we add the `left` parameter argument, cumulatively. This way, each horizontal bar do not overlap with each other.

#### Horizontal Decoration

It is also pretty similar with previous decoration. Again, I append `legend` to make the chart more informative.

``````axes.legend(
loc="upper left",
bbox_to_anchor=(1, 1, 0, 0))
axes.margins(x=0.1)

axes.set_yticks(y_pos, labels=breeds)
axes.invert_yaxis()
axes.set_xlabel('Population')
axes.set_title('Pet Stages')
axes.set_position([0.15, 0.1, 0.60, 0.8])
axes.set_xlim([-1, 25])

plt.show()`````` The result might about similar to below chart. I found that is easier to read the dog breed name at the left axes.

This my report. Only consist one page, and nothing more!

### Conclusion

That is all. I keep these scripts in my blog, so I can find any of them easily later. Plotting with `matplotlib` is fun.

What do you think ?