Charts and Data Visualization with Python and matplotlib
matplotlib is Python's most popular visualization library. Create line charts, bar charts, pie charts, scatter plots, and export them to PNG, PDF, SVG or display interactively.
Installation
pip install matplotlib numpy pandas
Line Chart
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(x, y1, label="sin(x)", color="#4a9eff", linewidth=2)
ax.plot(x, y2, label="cos(x)", color="#ff6b6b", linewidth=2, linestyle="--")
ax.set_title("Trigonometric Functions", fontsize=14)
ax.set_xlabel("X")
ax.set_ylabel("Y")
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("line_chart.png", dpi=150, bbox_inches="tight")
print("Chart saved: line_chart.png")
plt.close()
Bar Chart
import matplotlib.pyplot as plt
import numpy as np
months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun"]
sales = [12500, 9800, 15200, 13400, 17800, 14300]
targets = [12000, 12000, 14000, 14000, 16000, 16000]
x = np.arange(len(months))
w = 0.35
fig, ax = plt.subplots(figsize=(10, 6))
bars1 = ax.bar(x - w/2, sales, w, label="Actual Sales", color="#4a9eff")
bars2 = ax.bar(x + w/2, targets, w, label="Target", color="#ff6b6b", alpha=0.7)
for bar in bars1:
ax.annotate(f"{bar.get_height():,}",
xy=(bar.get_x() + bar.get_width()/2, bar.get_height()),
xytext=(0, 4), textcoords="offset points", ha="center", fontsize=9)
ax.set_title("Sales vs Target 2024", fontsize=14)
ax.set_xticks(x)
ax.set_xticklabels(months)
ax.set_ylabel("USD")
ax.legend()
ax.grid(axis="y", alpha=0.3)
plt.tight_layout()
plt.savefig("bar_chart.png", dpi=150, bbox_inches="tight")
plt.close()
Pie Chart
import matplotlib.pyplot as plt
categories = ["Rent", "Staff", "Marketing", "Technology", "Other"]
values = [35, 28, 18, 12, 7]
colors = ["#4a9eff", "#ff6b6b", "#51cf66", "#ffd43b", "#cc5de8"]
explode = [0, 0, 0.05, 0, 0] # Highlight Marketing
fig, ax = plt.subplots(figsize=(8, 8))
wedges, texts, autotexts = ax.pie(
values,
labels=categories,
colors=colors,
explode=explode,
autopct="%1.1f%%",
startangle=90,
shadow=True
)
for autotext in autotexts:
autotext.set_fontsize(10)
autotext.set_fontweight("bold")
ax.set_title("Expense Distribution 2024", fontsize=14, pad=20)
plt.savefig("pie_chart.png", dpi=150, bbox_inches="tight")
plt.close()
Scatter Plot with Trend Line
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(42)
n = 200
x = np.random.randn(n)
y = 2 * x + np.random.randn(n) * 0.8
c = np.abs(x + y)
fig, ax = plt.subplots(figsize=(8, 6))
scatter = ax.scatter(x, y, c=c, cmap="viridis", alpha=0.7, s=50, edgecolors="none")
plt.colorbar(scatter, ax=ax, label="Intensity")
m, b = np.polyfit(x, y, 1)
x_line = np.linspace(x.min(), x.max(), 100)
ax.plot(x_line, m*x_line + b, "r--", linewidth=2, label=f"y={m:.2f}x+{b:.2f}")
ax.set_title("Scatter Plot with Trend Line")
ax.set_xlabel("Variable X")
ax.set_ylabel("Variable Y")
ax.legend()
ax.grid(alpha=0.3)
plt.tight_layout()
plt.savefig("scatter.png", dpi=150, bbox_inches="tight")
plt.close()
Multi-Panel Dashboard
import matplotlib.pyplot as plt
import numpy as np
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle("Sales Dashboard 2024", fontsize=16, fontweight="bold")
months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
sales = [12,10,15,13,18,14,16,15,19,17,20,22]
axes[0,0].plot(months, sales, "o-", color="#4a9eff", linewidth=2)
axes[0,0].set_title("Sales Trend")
axes[0,0].grid(alpha=0.3)
axes[0,1].bar(months[:6], sales[:6], color="#51cf66")
axes[0,1].set_title("H1 Sales")
channels = ["Online","In-Store","B2B"]
pcts = [55, 30, 15]
axes[1,0].pie(pcts, labels=channels, autopct="%1.0f%%", startangle=90)
axes[1,0].set_title("Sales Channel")
data = np.random.normal(15, 3, 1000)
axes[1,1].hist(data, bins=20, color="#ffd43b", edgecolor="white")
axes[1,1].set_title("Average Ticket Distribution")
axes[1,1].set_xlabel("USD")
plt.tight_layout()
plt.savefig("dashboard.png", dpi=150, bbox_inches="tight")
print("Dashboard saved: dashboard.png")
plt.close()
Export to PDF and SVG
import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
# Multiple charts in one PDF
with PdfPages("report.pdf") as pdf:
fig1, ax1 = plt.subplots()
ax1.plot([1,2,3,4], [10,15,12,18])
ax1.set_title("Weekly Sales")
pdf.savefig(fig1, bbox_inches="tight")
plt.close(fig1)
fig2, ax2 = plt.subplots()
ax2.bar(["A","B","C"], [30,45,25])
ax2.set_title("Categories")
pdf.savefig(fig2, bbox_inches="tight")
plt.close(fig2)
print("PDF generated: report.pdf (2 pages)")
# Export to SVG (vector)
fig, ax = plt.subplots()
ax.plot([1,2,3], [4,2,5])
plt.savefig("chart.svg", format="svg", bbox_inches="tight")
print("SVG generated: chart.svg")
plt.close()
Additional Resource
For converting PNG, PDF and SVG chart images between formats without any coding, use KaijuConverter — free and no registration required.
Related conversions
Frequent conversions across the catalogue: