查看全课大纲(第 72 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

Matplotlib颜色、标记、线型

约 5 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

Matplotlib 颜色、标记与线型

小象实战讲义 · Python数据分析实战

在数据可视化中,折线图是最常用的图表之一,用于展示数据随时间或其他连续变量的变化趋势。然而,当我们需要在同一张图中绘制多条折线,或者图表需要以黑白形式打印时,仅靠默认的样式可能无法清晰地区分不同的数据系列。本节将详细介绍如何在 Matplotlib 中,通过一个简洁的格式化字符串,灵活地控制折线图的颜色、标记和线型,以满足多样化的可视化需求。

💡 核心导读

  • 格式化字符串 (fmt):掌握 plt.plot(x, y, fmt) 中 fmt 参数的核心作用,它用一个字符串同时指定颜色、标记和线型。
  • 样式三要素:理解颜色(Color)、标记(Marker)、线型(Line Style)这三个基本样式元素及其常用代码。
  • 灵活组合:学会如何自由组合这三个元素,例如 'r.--' 表示红色点标记虚线,顺序可以任意。
  • 应用场景:了解在黑白打印或多系列数据对比时,如何通过标记和线型来有效区分不同的数据线。

理解 plt.plot 的格式化字符串

在 Matplotlib 中,绘制折线图最基础的方法是 plt.plot(x, y)。其中 x 和 y 分别是横轴和纵轴的数据序列。如果我们使用默认样式,这条折线将是蓝色的实线,没有特殊的数据点标记。

然而,plt.plot 函数还支持第三个参数 fmt,它是一个格式化字符串,用于快速定义线条的样式。这个字符串可以包含最多三个部分,分别对应颜色、标记和线型,且这三个部分的顺序是任意的。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg') # 使用非交互式后端,确保代码在任何环境可运行

# 示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 5, 3]

# 使用格式化字符串绘制折线图:红色(r),点标记(.),虚线(--)
plt.plot(x, y, 'r.--')  # 等价于 '--r.' 或 '.r--'
plt.title('折线图示例: 红色点标记虚线')
plt.xlabel('X轴')
plt.ylabel('Y轴')
# 在实际环境中,可以使用 plt.show() 显示,此处为讲义演示,我们关闭图形
plt.close()

样式三要素详解

格式化字符串 fmt 的威力来自于对以下三个要素的编码:

  1. 颜色 (Color): 控制折线本身的颜色。

    • b: 蓝色 (blue)
    • g: 绿色 (green)
    • r: 红色 (red)
    • c: 青色 (cyan)
    • m: 品红 (magenta)
    • y: 黄色 (yellow)
    • k: 黑色 (black)
    • w: 白色 (white)
  2. 标记 (Marker): 控制每个数据点在图表上的显示符号。

    • .: 点 (point)
    • o: 圆圈 (circle)
    • v: 下三角 (triangle_down)
    • ^: 上三角 (triangle_up)
    • <: 左三角 (triangle_left)
    • >: 右三角 (triangle_right)
    • s: 正方形 (square)
    • p: 五边形 (pentagon)
    • *: 星号 (star)
  3. 线型 (Line Style): 控制连接数据点的线条样式。

    • -: 实线 (solid line)
    • --: 虚线 (dashed line)
    • -.: 点划线 (dash-dot line)
    • :: 点线 (dotted line)
    • (空格) 或 '': 无线条(只显示标记)

你可以只指定其中一个或两个元素。例如,'ro' 表示红色圆圈标记且无连接线(常用于散点图效果),'g-' 表示绿色实线(默认标记为无)。

综合示例:多子图样式对比

下面我们通过一个包含四个子图的示例,来直观展示不同格式化字符串组合的效果。我们将创建一组固定的示例数据,避免使用随机数,以确保讲义输出的确定性。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')
import numpy as np

# 创建固定的示例数据,便于复现
# 使用一个简单的正弦波片段加上一点偏移作为数据
x = np.linspace(0, 2*np.pi, 20)  # 20个点,从0到2π
data = np.sin(x) + 0.1 * np.array([i%3 for i in range(20)]) # 确定性数据

# 创建2x2的子图布局
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
fig.suptitle('Matplotlib 折线图样式配置示例')

# 子图1: 红色(r),点标记(.),虚线(--)
axs[0, 0].plot(data, '--r.')  # 顺序可以是颜色、标记、线型的任意组合
axs[0, 0].set_title("样式: '--r.' (红色点虚线)")

# 子图2: 绿色(g),下三角标记(v),点线(:)
axs[0, 1].plot(data, 'gv:')
axs[0, 1].set_title("样式: 'gv:' (绿色下三角点线)")

# 子图3: 蓝色(b),左三角标记(<),实线(-)
axs[1, 0].plot(data, 'b<-')
axs[1, 0].set_title("样式: 'b<-' (蓝色左三角实线)")

# 子图4: 黄色(y),正方形标记(s),点划线(-.)
axs[1, 1].plot(data, 'ys-.')
axs[1, 1].set_title("样式: 'ys-.' (黄色正方形点划线)")

# 调整布局并关闭图形,在讲义中不实际显示
plt.tight_layout()
plt.close(fig)

# 打印数据的前5个值,供读者参考
print("示例数据 (前5个值):")
for i, val in enumerate(data[:5]):
    print(f"  数据点 {i}: {val:.4f}")
示例数据 (前5个值):
  数据点 0: 0.0000
  数据点 1: 0.4247
  数据点 2: 0.8142
  数据点 3: 0.8372
  数据点 4: 1.0694

通过这个例子,你可以清晰地看到:

  • 第一个子图是红色的虚线,每个数据点用点标记。
  • 第二个子图是绿色的点线,数据点用下三角标记。
  • 第三个子图是蓝色的实线,数据点用左三角标记。
  • 第四个子图是黄色的点划线,数据点用正方形标记。

这种配置方式非常简洁高效,尤其是在需要快速绘制多条具有不同样式的折线时。

黑白打印场景下的应用

当图表需要用于黑白打印时,颜色差异将失效。此时,标记和线型就成为区分不同数据系列的关键。例如,你可以将一条线设置为实线加圆形标记,另一条设置为虚线加方形标记,即使打印成黑白,也能清晰分辨。

import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')

# 模拟两组数据
x = [1, 2, 3, 4, 5]
y1 = [1, 4, 2, 5, 3]
y2 = [2, 3, 1, 4, 5]

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

# 使用不同的标记和线型,而不依赖颜色
plt.plot(x, y1, 'k-o', linewidth=2, markersize=8, label='系列 A (实心圆+实线)') # 黑色实线圆圈
plt.plot(x, y2, 'k--s', linewidth=2, markersize=8, label='系列 B (正方形+虚线)') # 黑色虚线正方形

plt.title('黑白打印友好型折线图')
plt.xlabel('时间步')
plt.ylabel('数值')
plt.legend()
plt.grid(True, linestyle=':', alpha=0.7)
plt.close()

print("图表已配置为黑白打印友好样式。")
print("系列 A: 黑色实线 + 圆形标记")
print("系列 B: 黑色虚线 + 方形标记")
图表已配置为黑白打印友好样式。
系列 A: 黑色实线 + 圆形标记
系列 B: 黑色虚线 + 方形标记

📝 动手练一练

  1. 概念辨析:格式化字符串 'c^:' 表示什么样的折线样式?如果只想绘制绿色的散点(只有标记,没有连线),应该用什么格式化字符串?
👉 点击查看参考答案
  1. 'c^:' 表示:青色(cyan)的点线(:),数据点用上三角(^)标记。
  2. 只想绘制绿色的散点,可以使用 'go'(绿色圆圈,无线条)或 'g.'(绿色点,无线条)。因为当不指定线型时,默认是无连接线的。
  1. 动手实践:参考综合示例的代码,尝试在同一个坐标系(plt.subplots(1,1))中,用一条红色星形标记的点划线和一条蓝色方形标记的虚线绘制两组数据。数据可以自行用列表定义,例如 [1, 3, 2, 5, 4] 和 [2, 2, 4, 3, 6]。
👉 点击查看参考答案
import matplotlib.pyplot as plt
import matplotlib
matplotlib.use('Agg')

x = [1, 2, 3, 4, 5]
y1 = [1, 3, 2, 5, 4]
y2 = [2, 2, 4, 3, 6]

plt.figure(figsize=(8,5))
plt.plot(x, y1, 'r*-.', label='系列1 (红星点划线)') # 红色(*),星形标记(*),点划线(-.)
plt.plot(x, y2, 'bs--', label='系列2 (蓝方虚线)')   # 蓝色(b),方形标记(s),虚线(--)
plt.title('双系列折线图样式练习')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.grid(True, linestyle=':', alpha=0.5)
plt.close()
print("代码已执行,绘制了红色星形点划线和蓝色方形虚线。")
代码已执行,绘制了红色星形点划线和蓝色方形虚线。

本章小结

本节深入学习了 Matplotlib 中用于快速配置折线图样式的格式化字符串(fmt)。通过将颜色、标记和线型编码成一个简短的字符串,我们可以极大地提升绘图效率,并轻松应对多数据系列对比或黑白打印等特定场景。

📋 行动清单

  • 记住常用颜色(r,g,b,c,m,y,k,w)、标记(.,o,v,^,<,>,s)和线型(-,—,-.,:)的代码。
  • 在下次绘制折线图时,尝试使用 fmt 参数替代分别设置 color、marker、linestyle 的方式。
  • 构思一个需要黑白打印的图表场景,并为其设计一套仅依靠标记和线型来区分数据系列的样式方案。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:Matplotlib颜色、标记、线型
    PDF · 205KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载