欢迎来到第106天!今天我们在前两天学习的基础上,深入探讨 Matplotlib 的绘图线(Line) 样式控制。线条是折线图的灵魂,掌握线条的样式、颜色和宽度,能让你的图表从"能用"变成"好看"。一、线条类型(linestyle)
线条类型通过 linestyle 参数(简写 ls)控制。
五种基本线型
基础示例
import matplotlib.pyplot as pltimport numpy as npypoints = np.array([6, 2, 13, 10])# 点虚线plt.plot(ypoints, linestyle='dotted')# 或简写:plt.plot(ypoints, ls=':')plt.show()
# 点划线plt.plot(ypoints, ls='-.')plt.show()
二、线条颜色(color)
线条颜色通过 color 参数(简写 c)控制。
预设颜色标记
自定义颜色
ypoints = np.array([6, 2, 13, 10])plt.plot(ypoints, c='#d09a1bff', linewidth=3, label='hex')plt.plot(ypoints + 0.5, c='SeaGreen', linewidth=3, label='SeaGreen')plt.plot(ypoints + 1, c=(0.5, 0.2, 0.8), linewidth=3, label='RGB')plt.legend()plt.show()
三、线条宽度(linewidth)
线条宽度通过 linewidth 参数(简写 lw)控制,值为浮点数。
ypoints = np.array([6, 2, 13, 10])# 超粗线条plt.plot(ypoints, linewidth=12.5)plt.show()
四、综合实战:线条样式大全
示例 1:四种线型对比
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 字体设置(确保中文正常显示) =================# 优先查找本地上传的 simhei.ttf,如果没有则查找 Linux 系统的文泉驿字体font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"# 加载字体属性prop = fm.FontProperties(fname=font_path)# 解决坐标轴负号 '-' 显示为方块的问题plt.rcParams['axes.unicode_minus'] = False # ================================================================x = np.linspace(0, 10, 50)y = np.sin(x)fig, ax = plt.subplots(figsize=(10, 6))# 四种线型(参照最佳实践:增加了颜色区分,让图表更清晰)ax.plot(x, y, '-', label='实线 (-)', linewidth=2, color='#1f77b4')ax.plot(x, y + 0.5, ':', label='点虚线 (:)', linewidth=2, color='#ff7f0e')ax.plot(x, y + 1.0, '--', label='破折线 (--)', linewidth=2, color='#2ca02c')ax.plot(x, y + 1.5, '-.', label='点划线 (-.)', linewidth=2, color='#d62728')# 设置标题和坐标轴(参照最佳实践:加粗标题、添加坐标轴标签、绑定字体)ax.set_title('线条类型对比', fontsize=16, fontweight='bold', fontproperties=prop)ax.set_xlabel('X 轴数值', fontsize=12, fontproperties=prop)ax.set_ylabel('Y 轴数值', fontsize=12, fontproperties=prop)# 设置图例(绑定字体)ax.legend(loc='upper right', prop=prop, fontsize=11)# 添加网格线(参照最佳实践:增加网格,提升可读性)ax.grid(True, alpha=0.3, linestyle='--')# 设置 Y 轴范围(稍微调大上限,防止最上面的线贴到图表边缘)ax.set_ylim(-1.5, 3.5) # 调整布局,防止标签被裁剪(参照最佳实践)plt.tight_layout()plt.show()

示例 2:不同颜色与宽度组合
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 字体设置(确保中文正常显示) =================# 优先查找本地上传的 simhei.ttf,如果没有则查找 Linux 系统的文泉驿字体font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"# 加载字体属性prop = fm.FontProperties(fname=font_path)# 解决坐标轴负号 '-' 显示为方块的问题plt.rcParams['axes.unicode_minus'] = False # ================================================================x = np.arange(5)y1 = [10, 20, 15, 30, 25]y2 = [12, 18, 22, 25, 28]y3 = [8, 15, 20, 22, 30]plt.figure(figsize=(10, 6))# 绘制线条(参照最佳实践:为少量数据点增加 marker 标记,提升可读性)plt.plot(x, y1, 'r-o', linewidth=1, label='细红线 (lw=1)', markersize=6)plt.plot(x, y2, 'g--s', linewidth=3, label='中粗绿线 (lw=3)', markersize=8)plt.plot(x, y3, 'b-^', linewidth=5, label='粗蓝线 (lw=5)', markersize=10)# 设置标题和坐标轴(参照最佳实践:加粗标题、绑定字体)plt.title('线条宽度与颜色组合', fontsize=16, fontweight='bold', fontproperties=prop)plt.xlabel('X 轴', fontsize=12, fontproperties=prop)plt.ylabel('Y 轴', fontsize=12, fontproperties=prop)# 设置图例(绑定字体,调整位置避免遮挡数据)plt.legend(loc='upper left', prop=prop, fontsize=11)# 添加网格线(参照最佳实践)plt.grid(True, alpha=0.3, linestyle='--')# 调整布局,防止标签被裁剪(参照最佳实践)plt.tight_layout()plt.show()

示例 3:完整美化折线图
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 字体设置(确保中文 100% 正常显示) =================font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"prop = fm.FontProperties(fname=font_path)plt.rcParams['axes.unicode_minus'] = False # ================================================================months = ['1月', '2月', '3月', '4月', '5月', '6月']sales = [120, 135, 148, 162, 155, 178]plt.figure(figsize=(10, 6))# 绘制线条:保留了你优秀的高级设计(空心圆、自定义蓝)plt.plot(months, sales, color='#2E86AB', linestyle='-', linewidth=2.5, marker='o', markersize=10, markerfacecolor='white', markeredgecolor='#2E86AB', markeredgewidth=2) # 在数据点上方显示数值(微调:增加了 fontweight='bold' 让数字更醒目)for i, v in enumerate(sales): plt.text(i, v + 4, f'{v}万', ha='center', fontsize=11, color='#333', fontproperties=prop, fontweight='bold')# 设置标题和坐标轴(绑定字体)plt.title('2026年上半年销售额趋势', fontsize=18, fontweight='bold', pad=20, fontproperties=prop)plt.xlabel('月份', fontsize=13, fontproperties=prop)plt.ylabel('销售额(万元)', fontsize=13, fontproperties=prop)plt.ylim(100, 200)plt.grid(True, alpha=0.3, linestyle='--')# 移除上方和右方边框(保留你的极简设计)ax = plt.gca()ax.spines['top'].set_visible(False)ax.spines['right'].set_visible(False)# 优化 X 轴刻度,确保月份文字完美居中plt.xticks(range(len(months)), months, fontproperties=prop, fontsize=12)plt.tight_layout()plt.show()

示例 4:只画线不画标记 vs 只画标记不画线
import matplotlib.pyplot as pltimport matplotlib.font_manager as fmimport numpy as npimport os# ================= 字体设置(确保中文 100% 正常显示) =================# 优先查找本地上传的 simhei.ttf,如果没有则查找 Linux 系统的文泉驿字体font_path = "simhei.ttf"if not os.path.exists(font_path): font_path = "/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc"# 加载字体属性prop = fm.FontProperties(fname=font_path)# 解决坐标轴负号 '-' 显示为方块的问题plt.rcParams['axes.unicode_minus'] = False # ================================================================x = np.arange(5)y = [10, 25, 15, 30, 20]fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))# ================= 左图:只画线,不画标记 =================ax1.plot(x, y, 'b-', linewidth=3)ax1.set_title('只画线(无标记)', fontsize=14, fontweight='bold', fontproperties=prop)ax1.set_xlabel('X 轴', fontsize=12, fontproperties=prop)ax1.set_ylabel('Y 轴', fontsize=12, fontproperties=prop)ax1.grid(True, alpha=0.3, linestyle='--')ax1.set_ylim(0, 35) # 微调 Y 轴范围,防止线条贴到顶部边缘# ================= 右图:只画标记,不画线 =================ax2.plot(x, y, 'ro', markersize=15, linestyle='None')ax2.set_title('只画标记(无线)', fontsize=14, fontweight='bold', fontproperties=prop)ax2.set_xlabel('X 轴', fontsize=12, fontproperties=prop)ax2.set_ylabel('Y 轴', fontsize=12, fontproperties=prop)ax2.grid(True, alpha=0.3, linestyle='--')ax2.set_ylim(0, 35) # 微调 Y 轴范围,防止大标记点被顶部边缘裁切# 调整布局,防止标签被裁剪plt.tight_layout()plt.show()

五、fmt 参数速查:一行代码搞定
还记得第105天的 fmt 参数吗?格式为 [标记][线条][颜色]:
ypoints = np.array([6, 2, 13, 10])# o: 圆形标记, -: 实线, r: 红色plt.plot(ypoints, 'o-r')# s: 方形标记, --: 破折线, g: 绿色plt.plot(ypoints, 's--g')# ^: 上三角, :. 点虚线, b: 蓝色plt.plot(ypoints, '^:b')
六、常用参数速查表
七、今日练习
基础练习:绘制一条折线图,使用破折线(--)、红色、线宽3
进阶练习:在同一张图中绘制3条线,分别使用实线、点虚线、点划线,颜色各不相同
挑战练习:绘制一条"隐形线"(只显示标记不显示线条),标记使用自定义颜色填充和边框
八、总结
今天我们学习了 Matplotlib 的绘图线样式:
关键记忆点:ls 控制线型,c 控制颜色,lw 控制宽度,三者配合 marker 相关参数,可以画出专业级图表。🎯 今日金句:代码是画笔,数据是颜料,而线条的粗细虚实,决定了你的图表是涂鸦还是艺术。