Aligning table to X-axis using matplotlib Python

The Python Matplotlib library allows us to create visual plots from given data. To make the data easier to read and relate to the chart, we can display it in the form of a table and position it directly below the corresponding bar chart.

Q1 Q2 Q3 Q4 80 60 90 70 85 65 95 75 Chart with Aligned Table

Since the x-axis runs horizontally, we arrange the table in the same direction so that each value aligns correctly under its corresponding bar. The table displays additional data that complements the visual chart.

Creating a Stacked Bar Chart with Aligned Table

Here's a complete example that creates a stacked bar chart with disaster loss data and aligns a table below the x-axis ?

import numpy as np
import matplotlib.pyplot as plt

# Set figure size and layout
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

# Disaster loss data (in thousands)
data = [
    [66386, 174296, 75131, 577908, 32015],  # 100 year
    [58230, 381139, 78045, 99308, 160454],  # 50 year
    [89135, 80552, 152558, 497981, 603535], # 20 year
    [78415, 81858, 150656, 193263, 69638],  # 10 year
    [139361, 331509, 343164, 781380, 52269] # 5 year
]

# Labels
columns = ('Freeze', 'Wind', 'Flood', 'Quake', 'Hail')
rows = ['%d year' % x for x in (100, 50, 20, 10, 5)]
n_rows = len(data)

# Visual appearance settings
values = np.arange(0, 2500, 500)
value_increment = 1000
colors = plt.cm.BuPu(np.linspace(0, 0.5, len(rows)))

# Bar chart parameters
index = np.arange(len(columns)) + 0.3
bar_width = 0.4
y_offset = np.zeros(len(columns))
cell_text = []

# Create stacked bars
for row in range(n_rows):
    plt.bar(index, data[row], bar_width, bottom=y_offset, color=colors[row])
    y_offset = y_offset + data[row]
    cell_text.append(['%1.1f' % (x / 1000.0) for x in y_offset])

# Add table below x-axis
colors_reversed = colors[::-1]
cell_text.reverse()
the_table = plt.table(
    cellText=cell_text,
    rowLabels=rows,
    rowColours=colors_reversed,
    colLabels=columns,
    loc='bottom'
)

# Final adjustments
plt.subplots_adjust(left=0.2, bottom=0.2)
plt.ylabel("Loss in $1000's")
plt.yticks(values * value_increment, ['%d' % val for val in values])
plt.xticks([])  # Remove x-axis ticks since table provides labels
plt.title('Loss by Disaster')

plt.show()

Key Components Explained

Table Positioning

The loc='bottom' parameter in plt.table() positions the table below the x-axis. This creates perfect alignment between chart bars and table columns ?

import matplotlib.pyplot as plt
import numpy as np

# Simple example showing table alignment
fig, ax = plt.subplots()

# Sample data
categories = ['A', 'B', 'C']
values = [10, 15, 8]

# Create bar chart
bars = ax.bar(categories, values, color=['red', 'green', 'blue'])

# Add aligned table
table_data = [['Sales', '10', '15', '8'],
              ['Target', '12', '14', '9']]

table = ax.table(cellText=table_data,
                colLabels=categories,
                loc='bottom',
                cellLoc='center')

# Remove x-axis labels (table provides them)
ax.set_xticks([])
ax.set_title('Chart with Aligned Table')

plt.show()

Stacked Bar Charts

A stacked bar chart displays multiple data series on top of each other. The bottom parameter ensures proper stacking ?

import matplotlib.pyplot as plt
import numpy as np

categories = ['Q1', 'Q2', 'Q3']
series1 = [20, 35, 30]
series2 = [15, 25, 20]

x = np.arange(len(categories))

plt.bar(x, series1, label='Product A', color='skyblue')
plt.bar(x, series2, bottom=series1, label='Product B', color='orange')

plt.xlabel('Quarters')
plt.ylabel('Sales')
plt.title('Stacked Bar Chart')
plt.xticks(x, categories)
plt.legend()

plt.show()

Best Practices

Aspect Recommendation Purpose
Table Position Use loc='bottom' Aligns with x-axis
X-axis Ticks Remove with plt.xticks([]) Table provides labels
Colors Match table and chart colors Visual consistency
Layout Use subplots_adjust() Proper spacing

Conclusion

Aligning tables with the x-axis in Matplotlib creates professional-looking visualizations that combine charts and tabular data. Use plt.table() with loc='bottom' to position tables below charts, and remove x-axis ticks to avoid label duplication.

Updated on: 2026-03-26T15:01:28+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements