Matplotlib统计图:绘制精美的直方图、条形图与箱线图
Matplotlib统计图:绘制精美的直方图、条形图与箱线图
导语
在数据分析中,选择正确的图表来揭示数据背后的故事至关重要。统计图表是探索数据分布、比较数值差异和识别异常值的核心工具。虽然基础的图表可以快速呈现信息,但一张“精美”的、经过深思熟虑定制的图表,其信息传递效率和专业性会呈指数级提升。本文将深入探讨 Matplotlib 中三种最核心的统计图表:直方图、条形图和箱线图,并分享如何将它们从“能看”变为“好看且信息丰富”。
一、 直方图 (Histogram) - 深入探索数据分布
直方图是观察单一变量数据分布的利器。它将数据划分为一系列“箱子”(bins),并统计每个箱子中的样本数量。
1. 基础直方图
import matplotlib.pyplot as plt
import numpy as np# 设置一个美观的样式
plt.style.use('seaborn-v0_8-whitegrid')# 准备数据
data = np.random.randn(1000)fig, ax = plt.subplots(figsize=(8, 6))
ax.hist(data, bins=30, color='skyblue', edgecolor='black')ax.set_title('Basic Histogram', fontsize=16)
ax.set_xlabel('Value', fontsize=12)
ax.set_ylabel('Frequency', fontsize=12)plt.show()
2. 精美定制:密度图与透明度
要更平滑地观察分布,可以在直方图上叠加核密度估计(KDE)曲线。同时,使用透明度(alpha
)可以让视觉效果更柔和。
from scipy.stats import gaussian_kdefig, ax = plt.subplots(figsize=(8, 6))# 绘制直方图,并设置为密度(而不是频率)
ax.hist(data, bins=30, density=True, alpha=0.6, color='cornflowerblue', label='Histogram')# 计算并绘制KDE曲线
kde = gaussian_kde(data)
x_range = np.linspace(data.min(), data.max(), 200)
ax.plot(x_range, kde(x_range), color='darkblue', lw=2, label='KDE Curve')ax.set_title('Histogram with KDE Curve', fontsize=16)
ax.set_xlabel('Value', fontsize=12)
ax.set_ylabel('Density', fontsize=12)
ax.legend()plt.show()
✅ 要点:density=True
将纵轴从频数转换为概率密度,这是绘制 KDE 曲线的前提。alpha
参数控制透明度,lw
控制线条宽度。
二、 条形图 (Bar Chart) - 精准比较类别数据
条形图用于比较不同类别下的数值大小。水平条形图、分组条形图和堆叠条形图是其最常见的变体。
1. 水平条形图 (barh
)
当类别标签很长时,水平条形图是比垂直条形图更好的选择。
categories = ['Category A', 'Category B', 'Category C is very long', 'Category D']
values = [25, 40, 30, 55]fig, ax = plt.subplots(figsize=(8, 6))
ax.barh(categories, values, color='mediumseagreen')ax.set_title('Horizontal Bar Chart', fontsize=16)
ax.set_xlabel('Value', fontsize=12)plt.show()
2. 精美定制:分组条形图与数值标签
分组条形图可以直观地比较多个类别在不同子组下的表现。为其添加数值标签是提升可读性的关键一步。
labels = ['G1', 'G2', 'G3', 'G4', 'G5']
men_means = [20, 34, 30, 35, 27]
women_means = [25, 32, 34, 20, 25]x = np.arange(len(labels)) # the label locations
width = 0.35 # the width of the barsfig, ax = plt.subplots(figsize=(10, 7))
rects1 = ax.bar(x - width/2, men_means, width, label='Men', color='royalblue')
rects2 = ax.bar(x + width/2, women_means, width, label='Women', color='lightcoral')# 添加数值标签
ax.bar_label(rects1, padding=3)
ax.bar_label(rects2, padding=3)ax.set_ylabel('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(x, labels)
ax.legend()fig.tight_layout()
plt.show()
✅ 要点:ax.bar_label()
是 Matplotlib 3.4.0+ 新增的便捷功能,可自动在条形图上添加数值标签。
三、 箱线图 (Box Plot) - 洞察数据离散程度
箱线图(又称盒须图)是展示数据分布摘要的强大工具。它能清晰地显示中位数、四分位数、异常值等关键统计量。
- 上边缘、下边缘:数据的最大值和最小值(在排除异常值后)。
- 箱体:包含 50% 的数据,上边是上四分位数(Q3),下边是下四分位数(Q1)。
- 中位线:箱体中间的线,代表数据的中位数。
- 异常值:远离主体数据的点。
1. 基础箱线图
# 准备多组数据
data1 = np.random.normal(100, 10, 200)
data2 = np.random.normal(80, 30, 200)
data3 = np.random.normal(90, 20, 200)
all_data = [data1, data2, data3]fig, ax = plt.subplots(figsize=(8, 6))
ax.boxplot(all_data, labels=['Data 1', 'Data 2', 'Data 3'])ax.set_title('Basic Box Plot', fontsize=16)
ax.set_ylabel('Value', fontsize=12)plt.show()
2. 精美定制:凹口与样式调整
通过添加凹口(notch)可以直观地比较不同组的中位数是否存在显著差异。同时,可以精细调整各个组件的样式。
fig, ax = plt.subplots(figsize=(10, 7))bp = ax.boxplot(all_data, notch=True, # 添加凹口patch_artist=True, # 开启填充labels=['Data 1', 'Data 2', 'Data 3'],boxprops=dict(facecolor='lightgoldenrodyellow', color='darkgoldenrod'),medianprops=dict(color='red', lw=2),whiskerprops=dict(color='darkgoldenrod', linestyle='--'),capprops=dict(color='black'),flierprops=dict(marker='x', markerfacecolor='red', markersize=8))ax.set_title('Customized Box Plot with Notches', fontsize=16)
ax.set_ylabel('Value', fontsize=12)plt.show()
✅ 要点:patch_artist=True
是自定义箱体填充色的前提。boxprops
, medianprops
等字典参数为精细化定制提供了入口。
四、 高效可视化的 AI 助力
绘制精美的统计图通常需要记住大量参数,并反复调试。在这个过程中,AI 编程助手能扮演重要角色。
- 快速生成模板:忘记
boxplot
的定制参数了?直接问 AI:“请给我一个 Matplotlib 自定义箱线图样式的代码示例。” - 智能调试:图表显示不符合预期?将代码和问题描述给 AI,它能帮你快速定位问题,例如坐标轴设置错误、数据格式问题等。
😳 AI 助手与 API 推荐
-
免费 AI 对话平台 (
https://0v0.pro
)- 优点:完全免费,无限制对话。无论是学习 Matplotlib 的新手,还是需要快速查找代码片段的开发者,都能从中受益。你可以随时向它请教绘图技巧,而无需担心成本。
-
高性价比 API 服务
- 按量计算 (
https://llm-all.pro
):如果你正在开发一个需要动态生成数据报告的应用,集成价格低廉的 AI API (如 OpenAI, Claude, Kimi 等) 可以自动化图表解说、数据摘要等任务,成本仅为官方的 1-6 折。 - 按次计算 (
https://fackai.chat
):适合轻量级应用或个人项目,按次付费,灵活控制开发成本。
- 按量计算 (
总结
本文深入探讨了直方图、条形图和箱线图的绘制,并重点展示了如何通过参数调整和样式设计来创作出信息丰富且视觉效果出色的“精美”图表。掌握这些技巧,将使你的数据分析报告更具说服力和专业性。数据可视化的魅力在于细节,现在就开始动手,用你的数据绘制出更精彩的故事吧!