Python+matplotlib绘制常见图表的入门教程

 更新时间:2026年05月18日 09:21:17   作者:yuanpan  
对于刚开始学习 Python 数据分析的同学来说,数据可视化是非常重要的一步,很多时候,表格中的数字并不直观,但只要画成图表,就能快速看出趋势、对比关系和占比结构,本文将以 matplotlib 为核心,带你完成常见图表绘制,需要的朋友可以参考下

引言

对于刚开始学习 Python 数据分析的同学来说,数据可视化是非常重要的一步。很多时候,表格中的数字并不直观,但只要画成图表,就能快速看出趋势、对比关系和占比结构。

本文将以 matplotlib 为核心,带你完成常见图表绘制,包括折线图、柱状图、饼图、中文乱码解决、标题和坐标轴设置,以及从 Excel 中读取数据并绘图。文章中的代码都适合初学者直接运行和修改。

一、matplotlib 库介绍

matplotlib 是 Python 中最常用的数据可视化库之一,尤其适合绘制二维图表。它可以绘制折线图、柱状图、散点图、饼图、直方图等常见统计图,也可以对图表标题、坐标轴、图例、颜色、字体、网格线等进行细致控制。

在 Python 数据分析中,matplotlib 经常和下面这些库一起使用:

  • numpy:用于数值计算
  • pandas:用于读取和处理表格数据
  • matplotlib:用于把数据绘制成图表

安装方式如下:

pip install matplotlib pandas openpyxl

其中:

  • matplotlib 用来绘图
  • pandas 用来读取 Excel 或 CSV 数据
  • openpyxl 用来支持 pandas 读取 .xlsx 文件

在代码中,一般这样导入:

import matplotlib.pyplot as plt

pyplotmatplotlib 中最常用的绘图接口,初学阶段重点掌握它即可。

二、解决 matplotlib 中文乱码问题

很多初学者第一次使用 matplotlib 绘图时,会遇到中文标题显示为方块、乱码,或者负号显示异常的问题。

可以在代码开头统一添加下面两行配置:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

说明:

  • SimHei 是 Windows 系统中常见的黑体字体
  • axes.unicode_minus = False 用来解决负号显示异常的问题

如果你使用 macOS,可以尝试:

plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"]

如果你使用 Linux,可以安装中文字体后再配置对应字体名称,例如 Noto Sans CJK SC

三、绘制折线图

折线图适合展示数据随时间或顺序变化的趋势,例如每天销售额、每月用户数、温度变化等。

下面的例子绘制一组“每月销售额”数据:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

months = ["1月", "2月", "3月", "4月", "5月", "6月"]
sales = [12000, 15000, 18000, 16000, 21000, 26000]

plt.figure(figsize=(8, 5))
plt.plot(months, sales, marker="o", color="blue", linewidth=2, label="销售额")

plt.title("上半年销售额趋势")
plt.xlabel("月份")
plt.ylabel("销售额(元)")
plt.legend()
plt.grid(True, linestyle="--", alpha=0.5)

plt.show()

常用参数说明:

  • marker="o":给每个数据点添加圆点标记
  • color="blue":设置折线颜色
  • linewidth=2:设置线条宽度
  • label="销售额":设置图例文字
  • plt.legend():显示图例
  • plt.grid():显示网格线

四、绘制柱状图

柱状图适合比较不同类别之间的数值大小,例如不同产品销量、不同城市订单数、不同部门收入等。

下面的例子绘制“不同产品销量”柱状图:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

products = ["手机", "电脑", "耳机", "平板", "手表"]
sales = [320, 210, 560, 180, 260]

plt.figure(figsize=(8, 5))
plt.bar(products, sales, color="orange", width=0.6)

plt.title("不同产品销量对比")
plt.xlabel("产品")
plt.ylabel("销量")

for index, value in enumerate(sales):
    plt.text(index, value + 10, str(value), ha="center")

plt.show()

这里使用了 plt.text() 给柱子顶部添加数值标签,让图表更容易阅读。

参数说明:

  • plt.bar(x, height):绘制柱状图
  • width=0.6:设置柱子的宽度
  • ha="center":让文字水平居中

五、绘制饼图

饼图适合展示各部分在整体中的占比,例如销售渠道占比、用户来源占比、支出结构等。

下面的例子绘制“用户来源占比”饼图:

import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

channels = ["搜索引擎", "短视频", "社交媒体", "直接访问", "邮件"]
users = [35, 25, 20, 15, 5]

plt.figure(figsize=(7, 7))
plt.pie(
    users,
    labels=channels,
    autopct="%.1f%%",
    startangle=90,
    counterclock=False
)

plt.title("用户来源占比")
plt.show()

常用参数说明:

  • labels:设置每个扇区的名称
  • autopct="%.1f%%":显示百分比,并保留 1 位小数
  • startangle=90:设置饼图起始角度
  • counterclock=False:按顺时针方向绘制

六、设置图表标题和坐标轴

一张完整的图表通常需要包含标题、横坐标名称、纵坐标名称和图例。否则读者很难理解图表表达的含义。

常用设置如下:

plt.title("图表标题")
plt.xlabel("横坐标名称")
plt.ylabel("纵坐标名称")
plt.legend()

如果想设置标题字体大小,可以这样写:

plt.title("图表标题", fontsize=16)
plt.xlabel("横坐标名称", fontsize=12)
plt.ylabel("纵坐标名称", fontsize=12)

如果横坐标文字较长,可以旋转一定角度:

plt.xticks(rotation=45)

如果图表元素显示得比较挤,可以使用:

plt.tight_layout()

它会自动调整图表边距,减少文字被遮挡的情况。

七、从 Excel 中读取数据绘图

实际工作中,数据通常不是直接写在代码里,而是保存在 Excel 表格中。我们可以使用 pandas 读取 Excel,再用 matplotlib 绘图。

假设有一个 Excel 文件 sales_data.xlsx,内容如下:

月份销售额
1月12000
2月15000
3月18000
4月16000
5月21000
6月26000

读取并绘制折线图:

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

df = pd.read_excel("sales_data.xlsx")

months = df["月份"]
sales = df["销售额"]

plt.figure(figsize=(8, 5))
plt.plot(months, sales, marker="o", color="green", linewidth=2)

plt.title("从 Excel 读取数据绘制销售额趋势图")
plt.xlabel("月份")
plt.ylabel("销售额(元)")
plt.grid(True, linestyle="--", alpha=0.5)
plt.tight_layout()

plt.show()

如果你的 Excel 文件不在当前 Python 文件所在目录,需要写完整路径,例如:

df = pd.read_excel(r"D:\data\sales_data.xlsx")

注意路径前面的 r,它可以避免 Windows 路径中的反斜杠被转义。

八、完整演示代码

下面是一份完整示例代码,会自动创建一个 Excel 文件,然后依次绘制折线图、柱状图、饼图,并演示如何从 Excel 中读取数据绘图。

你可以把它保存为 matplotlib_demo.py 后直接运行。

import pandas as pd
import matplotlib.pyplot as plt


def set_chinese_font():
    """设置中文字体,解决中文乱码和负号显示问题。"""
    plt.rcParams["font.sans-serif"] = ["SimHei"]
    plt.rcParams["axes.unicode_minus"] = False


def draw_line_chart():
    months = ["1月", "2月", "3月", "4月", "5月", "6月"]
    sales = [12000, 15000, 18000, 16000, 21000, 26000]

    plt.figure(figsize=(8, 5))
    plt.plot(months, sales, marker="o", color="blue", linewidth=2, label="销售额")

    plt.title("上半年销售额趋势", fontsize=16)
    plt.xlabel("月份")
    plt.ylabel("销售额(元)")
    plt.legend()
    plt.grid(True, linestyle="--", alpha=0.5)
    plt.tight_layout()
    plt.show()


def draw_bar_chart():
    products = ["手机", "电脑", "耳机", "平板", "手表"]
    sales = [320, 210, 560, 180, 260]

    plt.figure(figsize=(8, 5))
    plt.bar(products, sales, color="orange", width=0.6)

    plt.title("不同产品销量对比", fontsize=16)
    plt.xlabel("产品")
    plt.ylabel("销量")

    for index, value in enumerate(sales):
        plt.text(index, value + 10, str(value), ha="center")

    plt.tight_layout()
    plt.show()


def draw_pie_chart():
    channels = ["搜索引擎", "短视频", "社交媒体", "直接访问", "邮件"]
    users = [35, 25, 20, 15, 5]

    plt.figure(figsize=(7, 7))
    plt.pie(
        users,
        labels=channels,
        autopct="%.1f%%",
        startangle=90,
        counterclock=False
    )

    plt.title("用户来源占比", fontsize=16)
    plt.tight_layout()
    plt.show()


def create_excel_file():
    data = {
        "月份": ["1月", "2月", "3月", "4月", "5月", "6月"],
        "销售额": [12000, 15000, 18000, 16000, 21000, 26000]
    }

    df = pd.DataFrame(data)
    df.to_excel("sales_data.xlsx", index=False)


def draw_chart_from_excel():
    df = pd.read_excel("sales_data.xlsx")

    months = df["月份"]
    sales = df["销售额"]

    plt.figure(figsize=(8, 5))
    plt.plot(months, sales, marker="o", color="green", linewidth=2, label="Excel 数据")

    plt.title("从 Excel 读取数据绘制销售额趋势图", fontsize=16)
    plt.xlabel("月份")
    plt.ylabel("销售额(元)")
    plt.legend()
    plt.grid(True, linestyle="--", alpha=0.5)
    plt.tight_layout()
    plt.show()


if __name__ == "__main__":
    set_chinese_font()
    create_excel_file()
    draw_line_chart()
    draw_bar_chart()
    draw_pie_chart()
    draw_chart_from_excel()

运行代码后,你会依次看到四张图表:

  • 上半年销售额折线图
  • 不同产品销量柱状图
  • 用户来源占比饼图
  • 从 Excel 读取数据绘制的销售额趋势图

九、初学者常见问题

1. 为什么运行后没有显示图表?

请确认代码最后调用了:

plt.show()

如果你在 Jupyter Notebook 中运行,也可以在代码最前面添加:

%matplotlib inline

2. 为什么中文还是乱码?

可能是系统中没有安装代码中指定的中文字体。可以先查看系统字体,再把字体名称改成可用字体。

Windows 常用:

plt.rcParams["font.sans-serif"] = ["SimHei"]

macOS 常用:

plt.rcParams["font.sans-serif"] = ["Arial Unicode MS"]

Linux 可以使用:

plt.rcParams["font.sans-serif"] = ["Noto Sans CJK SC"]

3. 为什么读取 Excel 报错?

如果报错提示缺少 openpyxl,安装即可:

pip install openpyxl

如果报错提示找不到文件,请检查 Excel 文件名和路径是否正确。

十、总结

本文介绍了 Python 数据可视化入门中最常用的 matplotlib 操作,包括:

  • matplotlib 库的基本作用
  • 折线图绘制
  • 柱状图绘制
  • 饼图绘制
  • 中文乱码和负号显示问题解决
  • 图表标题、坐标轴、图例和网格线设置
  • 从 Excel 中读取数据并绘图
  • 一份可直接运行的完整演示代码

对于 Python 数据分析初学者来说,建议先熟练掌握折线图、柱状图和饼图这三类基础图表。后续再结合 pandas 做数据清洗和分组统计,就可以完成很多实用的数据分析可视化任务。

以上就是Python+matplotlib绘制常见图表的入门教程的详细内容,更多关于Python matplotlib绘制图表的资料请关注脚本之家其它相关文章!

相关文章

  • python实现可以断点续传和并发的ftp程序

    python实现可以断点续传和并发的ftp程序

    断点续传和并发是现在很多ftp程序都支持的功能,如果我们用python如何来做断点续传和并发了,今天来看一篇python实现断点续传和并发的ftp程序例子吧,具体如下。
    2016-09-09
  • pandas中df.groupby()方法深入讲解

    pandas中df.groupby()方法深入讲解

    在使用pandas进行数据统计分析时遇到了问题,找了很久才找到解决办法,所以下面这篇文章主要给大家介绍了关于pandas中df.groupby()方法的相关资料,需要的朋友可以参考下
    2022-12-12
  • 如何实现更换Jupyter Notebook内核Python版本

    如何实现更换Jupyter Notebook内核Python版本

    这篇文章主要介绍了如何实现更换Jupyter Notebook内核Python版本,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Python实现将.py代码转换为带语法高亮的Word和PDF

    Python实现将.py代码转换为带语法高亮的Word和PDF

    本指南介绍了几种将 Python 代码转换为 Word 和 PDF 文档的方法,确保您的代码易于阅读,并且以专业的方式呈现,有需要的小伙伴可以参考下
    2025-12-12
  • Python爬虫代理IP池实现方法

    Python爬虫代理IP池实现方法

    在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速稳定的运行,所以就想利用一些免费的资源搞一个简单的代理池服务。
    2017-01-01
  • 浅谈Python数据类型之间的转换

    浅谈Python数据类型之间的转换

    下面小编就为大家带来一篇浅谈Python数据类型之间的转换。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 浅析Python中的基本交易算法应用

    浅析Python中的基本交易算法应用

    这篇文章主要为大家详细介绍了如何使用Python进行基本交易算法的开发,包括数据获取,策略设计,回测和性能评估等关键步骤,需要的可以参考下
    2025-01-01
  • Python基于多线程实现抓取数据存入数据库的方法

    Python基于多线程实现抓取数据存入数据库的方法

    这篇文章主要介绍了Python基于多线程实现抓取数据存入数据库的方法,结合实例形式分析了Python使用数据库类与多线程类进行数据抓取与写入数据库操作的具体使用技巧,需要的朋友可以参考下
    2018-06-06
  • 使用python字典统计CSV数据的步骤和示例代码

    使用python字典统计CSV数据的步骤和示例代码

    为了使用Python字典来统计CSV数据,我们可以使用内置的csv模块来读取CSV文件,并使用字典来存储统计信息,以下是一个详细的步骤和完整的代码示例,需要的朋友可以参考下
    2024-12-12
  • Jupyter、PyCharm配置Anaconda虚拟环境全过程

    Jupyter、PyCharm配置Anaconda虚拟环境全过程

    本文介绍了如何在Anaconda中创建、激活、安装包、删除包和删除虚拟环境,以及如何将虚拟环境添加到Jupyter Notebook中,同时,还提到了解决在安装包时遇到的常见问题
    2026-02-02

最新评论