【Python数据分析】Matplotlib绘制不同的折线图

专栏导读

  • 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手

  • 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注

  • 👍 该系列文章专栏:请点击——>Python办公自动化专栏求订阅

  • 🕷 此外还有爬虫专栏:请点击——>Python爬虫基础专栏求订阅

  • 📕 此外还有python基础专栏:请点击——>Python基础学习专栏求订阅

  • 文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏

  • ❤️ 欢迎各位佬关注! ❤️

Matplotlib 简介

  • Matplotlib 是 Python 中最流行的 2D 绘图库,用于创建高质量的静态、动态和交互式可视化。它最初由 John D. Hunter 于 2003 年创建,现已成为 Python 科学计算生态系统中的核心可视化工具。

主要特点

  • 多功能性:支持线图、散点图、条形图、直方图、饼图、等高线图、3D 图等多种图表类型
  • 高度可定制:几乎可以控制图形的每个元素(标题、标签、刻度、图例等)
  • 多平台支持:可在多种操作系统和图形后端上工作
  • 与其他库良好集成:与 NumPy、Pandas、SciPy 等科学计算库无缝协作
  • 多种输出格式:支持 PNG、PDF、SVG、EPS 等多种格式输出

基本架构

  • Matplotlib 采用分层架构:
  • Backend Layer:底层接口,处理不同输出格式和渲染
  • Artist Layer:中间层,处理图形元素(线、文本、图像等)
  • Scripting Layer (pyplot):顶层接口,提供类似 MATLAB 的简单绘图命令

基本组件

  • Figure:整个图形窗口,可以包含多个子图
  • Axes:实际的绘图区域,包含坐标轴、标签等
  • Axis:坐标轴对象,控制刻度、标签等
  • Artist:所有可见元素(文本、线条、矩形等)的基类

库的安装

  • Matplotlib是Python中最常用的数据可视化库之一,它提供了多种折线图的绘制方法。下面我将介绍几种常见的柱状图类型及其实现方式。

用途安装
numpy数据生成pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/
matplotlib数据可视化pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple/

1. 基础折线图

  • 让我们从最基本的折线图开始。假设我们有一组简单的数据点

  • 这段代码会生成一个简单的直线图,展示了y值随x值线性增长的趋势。

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 数据准备
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 创建图形
plt.figure(figsize=(8, 5))

# 绘制折线图
plt.plot(x, y)

# 添加标题和标签
plt.title("基础折线图示例")
plt.xlabel("X轴")
plt.ylabel("Y轴")

# 显示图形
plt.show()

2. 多线折线图

  • 在实际分析中,我们经常需要比较多个数据系列。Matplotlib可以轻松实现这一点

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
# 生成数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 创建图形
plt.figure(figsize=(10, 6))

# 绘制两条折线
plt.plot(x, y1, label='sin(x)')
plt.plot(x, y2, label='cos(x)')

# 添加图例
plt.legend()

# 添加网格和标题
plt.grid(True)
plt.title("正弦和余弦函数比较")

plt.show()

3. 自定义折线样式

  • Matplotlib允许我们自定义折线的各种属性,包括颜色、线型、标记等

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = np.arange(0, 5, 0.1)
y = x ** 2

# 创建图形
plt.figure(figsize=(8, 6))

# 绘制自定义样式的折线图
plt.plot(x, y,
         color='red',      # 线条颜色
         linestyle='--',  # 线型:虚线
         linewidth=2,      # 线宽
         marker='o',       # 数据点标记
         markersize=8,     # 标记大小
         markerfacecolor='blue',  # 标记填充色
         markeredgecolor='black', # 标记边缘色
         markeredgewidth=1)       # 标记边缘宽度

plt.title("自定义样式的折线图")
plt.grid(True)
plt.show()

4. 带填充区域的折线图

  • 有时我们需要突出显示两条折线之间的区域:

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

plt.figure(figsize=(10, 6))

# 绘制两条折线
plt.plot(x, y1, 'b', label='sin(x)')
plt.plot(x, y2, 'r', label='cos(x)')

# 填充两条线之间的区域
plt.fill_between(x, y1, y2, 
                where=(y1 > y2),
                color='green', alpha=0.3,
                label='sin > cos')
plt.fill_between(x, y1, y2,
                where=(y1 <= y2),
                color='yellow', alpha=0.3,
                label='sin ≤ cos')

plt.legend()
plt.title("带填充区域的折线图")
plt.show()

5. 阶梯折线图

  • 阶梯图适用于展示离散数据的变化

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = [1, 2, 3, 4, 5]
y = [1, 3, 2, 5, 4]

plt.figure(figsize=(8, 5))

# 绘制阶梯图
plt.step(x, y,
         where='mid',  # 阶梯变化的位置:'pre', 'post', 'mid'
         linewidth=2,
         color='purple',
         label='数据变化')

plt.title("阶梯图示例")
plt.legend()
plt.grid(True)
plt.show()

6. 带误差线的折线图

  • 在科学数据分析中,我们经常需要展示数据的误差范围

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = np.arange(1, 6)
y = np.array([2, 3.5, 4, 5, 4.5])
y_err = np.array([0.5, 0.4, 0.6, 0.3, 0.7])

plt.figure(figsize=(8, 6))

# 绘制带误差线的折线图
plt.errorbar(x, y, yerr=y_err,
             fmt='-o',       # 线型和标记
             color='darkorange',
             ecolor='navy',  # 误差线颜色
             elinewidth=2,   # 误差线宽度
             capsize=5,      # 误差线端帽长度
             capthick=2)     # 误差线端帽宽度

plt.title("带误差线的折线图")
plt.grid(True)
plt.show()

7. 对数坐标折线图

  • 当数据跨越多个数量级时,对数坐标图非常有用

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = np.linspace(1, 100, 50)
y = np.exp(x/20)

plt.figure(figsize=(10, 6))

# 创建半对数图(y轴对数坐标)
plt.semilogy(x, y, 'g-', linewidth=2)

# 或者创建双对数图
# plt.loglog(x, y, 'g-', linewidth=2)

plt.title("半对数坐标折线图")
plt.grid(True, which="both", ls="--")
plt.show()

8. 多子图折线图

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

# 准备数据
x = np.linspace(0, 2*np.pi, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x) * np.cos(x)
y4 = np.tan(x)

# 创建2x2的子图布局
fig, axs = plt.subplots(2, 2, figsize=(12, 10))

# 绘制第一个子图
axs[0, 0].plot(x, y1, 'r-')
axs[0, 0].set_title('sin(x)')

# 绘制第二个子图
axs[0, 1].plot(x, y2, 'b--')
axs[0, 1].set_title('cos(x)')

# 绘制第三个子图
axs[1, 0].plot(x, y3, 'g-.')
axs[1, 0].set_title('sin(x)*cos(x)')

# 绘制第四个子图
axs[1, 1].plot(x, y4, 'm:')
axs[1, 1].set_title('tan(x)')

# 调整子图间距
plt.tight_layout()
plt.show()

9. 动态折线图(动画)

在这里插入图片描述

import matplotlib.pyplot as plt
from pylab import *
import numpy as np
from matplotlib.animation import FuncAnimation
import random

mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False

from matplotlib.animation import FuncAnimation
import random

# 准备图形
fig, ax = plt.subplots(figsize=(8, 5))
x = []
y = []
line, = ax.plot(x, y, 'b-')

# 设置坐标轴范围
ax.set_xlim(0, 100)
ax.set_ylim(0, 20)
ax.grid(True)

def update(frame):
    x.append(frame)
    y.append(random.uniform(5, 15))
    line.set_data(x, y)
    return line,

# 创建动画
ani = FuncAnimation(fig, update, frames=range(100),
                    interval=100, blit=True)

plt.title("动态折线图")
plt.show()

总结

  • 希望对初学者有帮助

  • 致力于办公自动化的小小程序员一枚

  • 希望能得到大家的【一个免费关注】!感谢

  • 求个 🤞 关注 🤞

  • 此外还有办公自动化专栏,欢迎大家订阅:Python办公自动化专栏

  • 求个 ❤️ 喜欢 ❤️

  • 此外还有爬虫专栏,欢迎大家订阅:Python爬虫基础专栏

  • 求个 👍 收藏 👍

  • 此外还有Python基础专栏,欢迎大家订阅:Python基础学习专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小庄-Python办公

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值