barplot

fivecentplots can plot bar charts using fcp.bar. At a minimum, the bar function requires the following keywords:

  • df: a pandas DataFrame

  • x: the name of the categorical data column

  • y: the name of the DataFrame column containing the values for the data in column x

Setup

Imports

In [1]:
%load_ext autoreload
%autoreload 2
%matplotlib inline
import fivecentplots as fcp
import pandas as pd
import numpy as np
import os, sys, pdb
osjoin = os.path.join
db = pdb.set_trace

Sample data

Read some fake bar chart data

In [2]:
df = pd.read_csv(osjoin(os.path.dirname(fcp.__file__), 'tests', 'fake_data_bar.csv'))
df.head()
Out[2]:
Liquid pH Measurement T [C]
0 Lemon juice 2.4 A 25
1 Orange juice 3.5 A 25
2 Battery acid 1.0 A 25
3 Bottled water 6.7 A 25
4 Coke 3.0 A 25

Set theme

Optionally set the design theme

In [3]:
#fcp.set_theme('gray')
#fcp.set_theme('white')

Other

In [4]:
SHOW = False

Bar plot types

Vertical

Consider a DataFrame that contains several sets of measured pH data for various liquids. First we plot only one set of measured data (note that we envoke the keyword to rotate the x tick labels so they are all readable):

In [5]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, filter='Measurement=="A" & T [C]==25', tick_labels_major_x_rotation=90)
_images/barplot_16_0.png

Horizontal

We can plot the same data horizontally by adding the keyword horizontal=True (notice now we do not need to rotate tick labels):

In [6]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, filter='Measurement=="A"', horizontal=True)
_images/barplot_19_0.png

Error bars

Now we can include all measurement sets in a single bar char. Now the bars represent the mean value of all data sets. We can also add error bars to indidcate the standard deviation between measurements:

In [7]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, tick_labels_major_x_rotation=90, error_bars=True)
_images/barplot_22_0.png

Grouping

Like the plot function, bar plots can grouped in various ways to provide further insight intot the data set. This includes a legend, “stacking”, row and/or col subplot values, and wrap values.

Legend

With a legend, each measurement set can be explicitly displayed in subsequent bars:

In [8]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, tick_labels_major_x_rotation=90, legend='Measurement')
_images/barplot_27_0.png

Stacked

Alternatively, we can stack the measurements to give a cumulative bar using the keyword stacked=True (which makes absolutely no sense for this data set but whatever):

In [9]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, tick_labels_major_x_rotation=90, stacked=True, legend='Measurement')
_images/barplot_30_0.png

Row/column plot

We can separate different conditions using row/col plots as shown below:

In [10]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, tick_labels_major_x_rotation=90, col='Measurement', row='T [C]', ax_hlines=0, ax_size=[300, 300])
_images/barplot_33_0.png

Wrap plot

Alternatively, we can use a wrap plot to visualize:

In [11]:
fcp.bar(df, x='Liquid', y='pH', show=SHOW, tick_labels_major_x_rotation=90, wrap='Measurement', ax_size=[300, 300])
_images/barplot_36_0.png