Back to Python

Python Data Visualization

Data Visualization Fundamentals

Python offers powerful libraries for creating static, animated, and interactive visualizations. Effective data visualization helps uncover patterns, trends, and insights in your data.

# Core visualization libraries
import matplotlib.pyplot as plt # Basic plotting
import seaborn as sns # Statistical visualizations
import plotly.express as px # Interactive plots
import pandas as pd # Data manipulation

# Sample data
data = pd.DataFrame({
    'x': [1, 2, 3, 4, 5],
    'y': [10, 20, 15, 25, 30]
})

# Basic matplotlib plot
plt.plot(data['x'], data['y'])
plt.title('Simple Line Plot')
plt.show()
Simple line plot

Matplotlib

Matplotlib is Python's foundational plotting library. It provides a MATLAB-like interface and is highly customizable for creating publication-quality figures.

# Common plot types
import numpy as np

# Create figure with subplots
fig, axes = plt.subplots(2, 2, figsize=(10, 8))

# Line plot
x = np.linspace(0, 10, 100)
axes[0,0].plot(x, np.sin(x), 'r-', label='sin(x)')
axes[0,0].set_title('Line Plot')

# Scatter plot
axes[0,1].scatter(np.random.rand(50), np.random.rand(50))
axes[0,1].set_title('Scatter Plot')

# Bar plot
axes[1,0].bar(['A', 'B', 'C'], [3, 7, 2])
axes[1,0].set_title('Bar Chart')

# Histogram
axes[1,1].hist(np.random.randn(1000), bins=30)
axes[1,1].set_title('Histogram')

plt.tight_layout()
plt.show()
Matplotlib subplots

Seaborn

Seaborn is built on Matplotlib and provides a high-level interface for drawing attractive statistical graphics. It works seamlessly with Pandas DataFrames.

# Load sample dataset
tips = sns.load_dataset('tips')

# Create a figure with multiple Seaborn plots
plt.figure(figsize=(12, 8))

# Scatter plot with regression line
plt.subplot(2, 2, 1)
sns.regplot(x='total_bill', y='tip', data=tips)
plt.title('Regression Plot')

# Box plot
plt.subplot(2, 2, 2)
sns.boxplot(x='day', y='total_bill', data=tips)
plt.title('Box Plot')

# Violin plot
plt.subplot(2, 2, 3)
sns.violinplot(x='day', y='total_bill', hue='sex', data=tips, split=True)
plt.title('Violin Plot')

# Heatmap
plt.subplot(2, 2, 4)
sns.heatmap(tips.corr(), annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap')

plt.tight_layout()
plt.show()
Seaborn plots

Plotly & Interactive Visualization

Plotly creates interactive, publication-quality graphs. Plotly Express provides a simple syntax for complex charts, while the lower-level Graph Objects API offers more control.

# Interactive Plotly examples
import plotly.express as px
import plotly.graph_objects as go

# Sample data
gapminder = px.data.gapminder()
gapminder_2007 = gapminder[gapminder.year == 2007]

# Scatter plot with hover info
fig1 = px.scatter(gapminder_2007, x='gdpPercap', y='lifeExp',
                size='pop', color='continent',
                hover_name='country', log_x=True,
                title='Life Expectancy vs GDP per Capita (2007)')
fig1.show()

# Animated bubble chart
fig2 = px.scatter(gapminder, x='gdpPercap', y='lifeExp',
                size='pop', color='continent',
                hover_name='country', log_x=True,
                animation_frame='year',
                range_x=[100,100000], range_y=[25,90],
                title='Life Expectancy vs GDP per Capita Over Time')
fig2.show()
Plotly interactive visualization

Data Visualization Best Practices

Effective visualizations communicate information clearly and accurately. Follow these guidelines:

  • Choose the right chart type - Match visualization to your data and message
  • Simplify - Remove unnecessary elements (chartjunk)
  • Label clearly - Include titles, axis labels, legends
  • Use color effectively - Be mindful of colorblind viewers
  • Highlight the important - Draw attention to key insights
  • Tell a story - Structure visualizations to guide the viewer
  • Consider your audience - Technical vs. non-technical viewers
  • Test your visualizations - Ensure they communicate effectively
# Example of good visualization practices
plt.figure(figsize=(10, 6))

# Create clear, labeled plot
plt.plot([2015, 2016, 2017, 2018, 2019],
        [100, 120, 90, 150, 200],
        marker='o', label='Product A')

plt.plot([2015, 2016, 2017, 2018, 2019],
        [80, 110, 130, 160, 180],
        marker='s', label='Product B')

# Add clear labels and title
plt.title('Annual Sales Growth (2015-2019)', fontsize=14)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Sales (in thousands)', fontsize=12)
plt.legend()
plt.grid(True, linestyle='--', alpha=0.7)

# Highlight important point
plt.annotate('Record Year', xy=(2019, 200),
            xytext=(2017, 210),
            arrowprops=dict(facecolor='black', shrink=0.05))

plt.tight_layout()
plt.show()

Python Data Visualization Videos

Master Python data visualization with these handpicked YouTube tutorials:

Python Data Visualization Quiz