跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

Python 数据可视化实战:基于 Matplotlib 的图表绘制指南

详细讲解了如何使用 Python 中的 Matplotlib 库进行数据可视化。内容涵盖折线图、柱状图、直方图、散点图和饼状图的绘制方法与代码实现。文章介绍了基本语法、颜色样式设置、图例标题添加、交互式模式开启以及图表保存技巧。通过实际案例(如股票价格、人口分布),展示了如何将数据转化为直观的图表,帮助读者掌握 Matplotlib 的核心功能并应用于数据分析场景。

疯疯癫癫发布于 2025/2/7更新于 2026/10/2496 浏览
Python 数据可视化实战:基于 Matplotlib 的图表绘制指南

可视化是数据分析的核心环节。仅仅收集、处理和分析数据是不够的,还需要将发现以直观的方式展示出来。数据应当讲述一个故事,而缺乏视觉呈现的数据往往显得枯燥。人类主要通过视觉获取信息,正如俗话所说'一图胜千言'。醒目的图表更容易吸引注意力并传达关键信息。

作为数据科学和机器学习领域最流行的编程语言,Python 提供了丰富的可视化解决方案。本章将重点学习使用最著名的 Python 可视化库 Matplotlib。其他大多数 Python 可视化库(如 Seaborn)通常构建在 Matplotlib 之上或与其有相似的绘图方法。

一、Matplotlib 概述

Matplotlib 是第一个用于绘制数据图表的主要 Python 库。它是世界上使用最广泛的 Python 可视化解决方案之一。Matplotlib 支持绘制多种类型的图表,包括折线图、柱状图、散点图和直方图等常用类型。此外,它还有许多扩展模块可用于天文、地理或科学数据的可视化。

Matplotlib 通常随 Anaconda 发行版自带。只需导入 pyplot 模块即可开始使用。新建 Jupyter Notebook 文件后,执行以下导入操作:

import matplotlib.pyplot as plt

Matplotlib 是一个庞大的库,我们通常不需要导入全部功能,只需导入主要的 pyplot 模块即可。

二、折线图 (Line Chart)

首先通过一个简单的案例介绍 Matplotlib 的基本用法。创建两个包含数值的列表作为坐标数据:

x = [2, 5, 7]
y = [2, 7, 3]

为了画线,需要将各个点连接起来。每个点对应 x 和 y 坐标。使用 Matplotlib 的 plot() 函数绘制折线图:

plt.grid(True)
plt.plot(x, y, marker="o")

plt.grid(True) 用于显示网格,帮助观察坐标对应关系。参数 marker="o" 表示在数据点上显示圆形标记。如果去掉该参数,将只显示连接线。

plt.plot() 函数非常灵活,可以接收任意两个迭代变量(如列表、元组、Pandas Series 或 NumPy 数组)作为 x 和 y 坐标。它还支持多种样式和颜色参数。

1. 颜色设置

颜色可以通过首字母缩写、完整名称、HEX 代码或 RGB 格式传入:

# 使用首字母
plt.plot(x, y, color="b") # Blue
plt.plot(x, y, color="r") # Red
plt.plot(x, y, color="g") # Green

# 使用完整名称
plt.plot(x, y, color="blue")
plt.plot(x, y, color="red")

# 使用 HEX 代码
plt.plot(x, y, color="#F08080") # LightCoral

2. 图例与标题

所有图表都需要图例和标题。使用 legend() 和 title() 函数添加注释:

plt.plot(x, y, color="#F08080", label="Data Line")
plt.legend()

图例位置可通过 loc 参数调整,例如 lower center。标题同样支持位置、颜色和字号设置:

plt.title("Sample Plot", loc="left", color="#196F3D", fontsize=22)

3. 股票价格示例

下面演示如何绘制历史股价折线图。首先需要安装 pandas-datareader 库来获取数据:

import pandas_datareader as pdr
import pandas as pd

# 获取苹果股票历史数据
data = pdr.DataReader("AAPL", "yahoo", "2021-01-01", "2021-12-12")

# 提取调整后的收盘价
y = data["Adj Close"]
x = data.index

plt.figure(figsize=(12, 8))
plt.plot(x, y, color="#196F3D", label="AAPL")
plt.legend(loc="lower right")
plt.title("Apple Inc. Stock Price", loc="left", color="#196F3D", fontsize=22)
plt.xticks(rotation=45) # 旋转 X 轴标签以便阅读
plt.show()

4. 样式与保存

可以使用 grid() 函数添加自定义网格线,并通过 figure() 设置画布大小:

plt.grid(color="brown", linestyle=":")
plt.figure(figsize=(12, 8))

Matplotlib 还支持预设样式表,例如 seaborn 风格:

plt.style.use("seaborn")

注意:样式设置应在绘图之前调用。最后,使用 savefig() 保存图表:

plt.savefig("stock_price.png")

请确保 savefig() 是绘图命令的最后一步。

三、柱状图 (Bar Chart)

虽然前文主要介绍了折线图,但柱状图也是 Matplotlib 中常用的图表类型,适合比较不同类别的数据。本节补充柱状图的绘制方法。

假设我们要比较不同产品的销售数量:

products = ['Product A', 'Product B', 'Product C', 'Product D']
sales = [120, 200, 150, 300]

plt.figure(figsize=(10, 6))
plt.bar(products, sales, color='skyblue', edgecolor='black')
plt.title('Sales Comparison by Product')
plt.xlabel('Products')
plt.ylabel('Sales Volume')
plt.show()

通过 bar() 函数,可以轻松创建垂直柱状图。若需水平柱状图,可使用 barh() 函数。还可以设置柱子的宽度、颜色以及边缘样式来美化图表。

四、直方图 (Histogram)

直方图常用于展示数据的分布情况。与 plot() 不同,hist() 方法需要一组数据作为输入。

我们可以计算股票每日回报率并将其绘制成直方图:

# 计算每日百分比变化
stock_return = data['Adj Close'].pct_change(1) * 100

# 删除 NaN 值
stock_return.dropna(inplace=True)

plt.figure(figsize=(10, 6))
plt.hist(stock_return, bins=100, color='green', alpha=0.7)
plt.title('Distribution of AAPL Daily Return')
plt.xlabel('Daily Percentage Return')
plt.ylabel('Frequency')
plt.show()

bins 参数控制分箱的数量,增加 bins 可以获得更精确的分布结果。直方图可保存为 png、jpeg、pdf 或 svg 格式。

五、散点图 (Scatter Plot)

散点图用于分析两个变量之间的关系。Matplotlib 的 scatter() 函数不仅可以绘制点,还能根据数值调整点的大小和颜色。

以下示例展示美国各州人口分布(简化版):

import pandas as pd

# 模拟数据
states = ['California', 'Texas', 'Florida', 'New York']
population = [39.5, 29.1, 21.5, 19.5] # 单位:百万

plt.figure(figsize=(10, 8))
plt.scatter(states, population, s=population*1000, c=population, cmap='plasma', alpha=0.6)
plt.title('US State Population Estimates')
plt.ylabel('Population in Millions')
plt.xticks(rotation=90)
plt.colorbar(label='Population Size')
plt.show()

scatter() 函数支持 s (大小)、c (颜色) 和 alpha (透明度) 等参数。通过 annotate() 函数可以在特定点添加文本标签:

for i, state in enumerate(states):
    plt.annotate(state, (i, population[i]), textcoords="offset points", xytext=(0,10), ha='center')

Jupyter Notebook 中可以使用 %matplotlib notebook 开启交互式模式,允许缩放和平移图表。

六、饼状图 (Pie Chart)

饼状图适合展示部分与整体的比例关系。我们将使用 pie() 函数绘制美国各区域人口占比。

regions = ['South', 'West', 'Midwest', 'Northeast']
percentages = [38.26, 23.87, 20.82, 17.06]
colors = ['#00FFFF', '#FF00FF', '#00FF00', '#800080']

plt.figure(figsize=(8, 8))
plt.pie(percentages, labels=regions, colors=colors, autopct='%1.1f%%', shadow=True, startangle=90)
plt.title('US Population by Region')
plt.axis('equal') # 保证饼图为正圆
plt.show()

autopct 参数用于显示百分比数值。explode 参数可以将特定扇区突出显示。shadow=True 可添加阴影效果增强立体感。

七、总结

Matplotlib 是一个功能强大且易于上手的数据可视化工具。本文详细介绍了如何使用 Matplotlib 绘制折线图、柱状图、直方图、散点图和饼状图。掌握了这些基础图表后,结合样式设置、交互模式和保存功能,可以满足大部分日常数据分析的可视化需求。

对于更复杂的图表定制,建议查阅官方文档:https://matplotlib.org/stable/gallery/index.html。通过不断实践,你可以利用 Matplotlib 及其生态插件创造出专业且美观的数据报告。

目录

  1. 一、Matplotlib 概述
  2. 二、折线图 (Line Chart)
  3. 1. 颜色设置
  4. 使用首字母
  5. 使用完整名称
  6. 使用 HEX 代码
  7. 2. 图例与标题
  8. 3. 股票价格示例
  9. 获取苹果股票历史数据
  10. 提取调整后的收盘价
  11. 4. 样式与保存
  12. 三、柱状图 (Bar Chart)
  13. 四、直方图 (Histogram)
  14. 计算每日百分比变化
  15. 删除 NaN 值
  16. 五、散点图 (Scatter Plot)
  17. 模拟数据
  18. 六、饼状图 (Pie Chart)
  19. 七、总结

更多推荐文章

查看全部
  • Python Pandas 安装踩坑与解决方案
  • Web 自动化测试入门:从概念到百度搜索实战
  • Flutter for OpenHarmony:使用 money2 实现高精度金融计算
  • FlowMiner:基于流关联挖掘的加密流量分类模型
  • Visual C++ 运行库安装与故障排查指南
  • Win11 资源管理器增强工具 QTTabBar 中文优化版安装指南
  • 自定义 View 结合 RecyclerView 实现时光轴效果
  • node-llama-cpp 跨平台安装与配置:Windows、Linux、Mac
  • Mac Mini M4 本地 AI 模型部署实战:Ollama 与 Stable Diffusion 环境搭建
  • 实战配置 CLAUDE.md:禁止 AI 自动添加 Git Commit 签名并规范格式
  • Python 网络请求模拟实战:从基础到复杂场景
  • Java 云门诊 HIS 系统技术架构与核心功能介绍
  • 前端小白必看 React Router路由配置全攻略(附避坑指南)
  • ClawdBot 本地部署与控制台授权实操
  • 2024 年程序员入门大模型必读书单推荐
  • 2G 内存云服务器部署 Spring Boot + MySQL 实践
  • 北漂转行软件测试:从零开始的外企高薪实战指南
  • Docker 快速部署 Nginx、Redis、MySQL、Tomcat 及制作镜像
  • Ubuntu 安装 MySQL 社区版
  • 现代 C++ 构建高性能 HTTP 服务器设计与实现

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online