NCL_bar_7.py

NCL_bar_7.py#

This script illustrates the following concepts:
  • Drawing filled bars

  • Filling the bars in a bar plot with different colors

  • Setting the minimum/maximum value of the Y axis in a bar plot

  • Adding text to a plot

  • Rotating text 45 degrees

  • Drawing a custom legend

See following URLs to see the reproduced NCL plot & script:

Import packages:

import numpy as np
import matplotlib.pyplot as plt

import geocat.viz as gv

Generate data:

x = [1, 2, 3, 4, 5, 6, 7, 8]
data = [154900, 56600, 40000, 30200, 29700, 24400, 21700, 13900]
labels = [
    'Lung',
    'Colon/rectum',
    'Breast',
    'Prostate',
    'Pancreas',
    'Non-Hodgkin\'s Lymphoma',
    'Leukemias',
    'Ovary',
]

Create the custom color list.

color_list = [
    'firebrick',
    'red',
    'orange',
    'green',
    'navy',
    'blue',
    'skyblue',
    'slateblue',
]

Specify some plot settings to use in both plots:

# Title settings
title = 'Estimated Cancer Deaths for 2002'
title_fontsize = 16

# Axis Settings
plot_y_max = 180_000

Plot 1 (Bar chart):

# Generate figure (set its size (width, height) in inches) and axes
plt.figure(1, figsize=(6, 5))
ax = plt.gca()

# Bar-plot the data
plt.bar(x, data, color=color_list, edgecolor='black')
plt.title(title, fontsize=title_fontsize, y=1.04)

# Add a rotated label to each bar.
for k, label in enumerate(labels):
    plt.text(x[k], data[k] + 2000, label, rotation=45)

# Use geocat.viz.util convenience function to set axes limits & tick values without calling several matplotlib functions
gv.set_axes_limits_and_ticks(
    ax, ylim=(0, plot_y_max), xticks=[], yticks=np.linspace(0, plot_y_max, 7)
)

# Use geocat.viz.util convenience function to add minor and major tick lines
gv.add_major_minor_ticks(ax, x_minor_per_major=0, y_minor_per_major=3, labelsize=12)

# Draw plot on the screen.
plt.show()
Estimated Cancer Deaths for 2002

Plot 2 (Bar chart with a legend):

# Generate figure (set its size (width, height) in inches) and axes
plt.figure(2, figsize=(6, 5))
ax = plt.gca()

# Bar-plot the data
bar_handle = plt.bar(x, data, color=color_list, edgecolor='black')

# Reverse the legend ordering to match NCL
bars_reversed = bar_handle[::-1]
labels_reversed = labels[::-1]

# Add the legend
plt.legend(bars_reversed, labels_reversed)

# Use geocat.viz.util convenience function to set axes limits & tick values without calling several matplotlib functions
gv.set_axes_limits_and_ticks(
    ax, ylim=(0, plot_y_max), xticks=[], yticks=np.linspace(0, plot_y_max, 7)
)

# Use geocat.viz.util convenience function to add minor and major tick lines
gv.add_major_minor_ticks(ax, x_minor_per_major=0, y_minor_per_major=3, labelsize=12)

# Use geocat.viz.util convenience function to set titles and labels without calling several matplotlib functions
gv.set_titles_and_labels(
    ax, maintitle=title, maintitlefontsize=title_fontsize, ylabel="Number of Deaths"
)

# Show the plot
plt.tight_layout()
plt.show()
Estimated Cancer Deaths for 2002

Total running time of the script: (0 minutes 0.183 seconds)

Gallery generated by Sphinx-Gallery