Skip to content
Related Articles

Related Articles

Diverging Bar Chart using Python

View Discussion
Improve Article
Save Article
  • Difficulty Level : Medium
  • Last Updated : 15 Mar, 2021
View Discussion
Improve Article
Save Article

Diverging Bar Charts are used to ease the comparison of multiple groups. Its design allows us to compare numerical values in various groups. It also helps us to quickly visualize the favorable and unfavorable or positive and negative responses. The bar chart consisted of a combination of two horizontal bars starting from the middle- one bar extends out from right to left and the other extends out from left to right. The length of the bar is corresponding to the numerical value it represents.

Commonly the two diverging bars are represented with different colors. Values to the left are usually but not necessarily negative or unsatisfactory responses.

Python doesn’t have a particular function to plot diverging bar charts. The alternate way is to use hlines function to draw horizontal lines with a certain value of linewidth to represent them as horizontal bars.

Datasets in use:

Method 1: Using Matplotlib

Approach :

  • Import module
  • Import or create data
  • Preprocess the dataset and clean out the unnecessary noise
  • Specify the colors for representing the horizontal bars
  • Sort the values in ascending order
  • Set the labels for the x-axis and y-axis as well as the title of the chart
  • Display the Diverging Bar Chart

Example 1: 


import pandas as pd
import matplotlib.pyplot as plt
import string as str
# Creating a DataFrame from the CSV Dataset
df = pd.read_csv("car_sales.csv", sep=';')
# Separating the Date and Mercedes-Benz Cars unit sales (USA)
df['car_sales_z'] = df.loc[:, ['Mercedes-Benz Cars unit sales (USA)']]
df['car_sales_z'] = df['car_sales_z'] .str.replace(
    ',', '').astype(float)
# Removing null value
df.drop(df.tail(1).index, inplace=True)
for i in range(35):
    # Colour of bar chart is set to red if the sales 
    # is < 60000 and green otherwise
    df['colors'] = ['red' if float(
        x) < 60000 else 'green' for x in df['car_sales_z']]
# Sort values from lowest to highest
df.sort_values('car_sales_z', inplace=True)
# Resets initial index in Dataframe to None
# Draw plot
plt.figure(figsize=(14, 10), dpi=80)
# Plotting the horizontal lines
plt.hlines(y=df.index, xmin=60000, xmax=df.car_sales_z,
           color=df.colors, alpha=0.4, linewidth=5)
# Decorations
# Setting the labels of x-axis and y-axis
plt.gca().set(ylabel='Quarter', xlabel='Sales')
# Setting Date to y-axis
plt.yticks(df.index, df.Date, fontsize=12)
# Title of Bar Chart
plt.title('Diverging Bars Chart Example', fontdict={
          'size': 20})
# Optional grid layout
plt.grid(linestyle='--', alpha=0.5)
# Displaying the Diverging Bar Chart


Method 2: Using Plotly


  • Import required libraries
  • Create or import data
  • Preprocess the Dataset and clean out the unnecessary noise
  • Plot the graph using plotly.graph_objects
  • Set the labels for the x-axis and y-axis as well as the legend
  • Display the Diverging Bar Chart



import pandas as pd
import plotly.graph_objects as go
df = pd.read_csv("Tweets.csv")
# Preprocessing the dataset to extract only
# the necessary columns
categories = [
# Construct a pivot table with the column
# 'airline' as the index and the sentiments
# as the columns
gfg = pd.pivot_table(
# Include the sentiments - negative, neutral
# and positive
gfg = gfg[categories]
# Representing negative sentiment with negative
# numbers
gfg.negative = gfg.negative * -1
df = gfg
# Creating a Figure
Diverging = go.Figure()
# Iterating over the columns
for col in df.columns[4:]:
    # Adding a trace and specifying the parameters
    # for negative sentiment
                               hovertemplate="%{y}: %{customdata}"))
for col in df.columns:
    # Adding a trace and specifying the parameters
    # for positive and neutral sentiment
                               hovertemplate="%{y}: %{x}"))
# Specifying the layout of the plot
                        legend_x=1, legend_y=0


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!