1.4 常用参数设置


文档摘要

1.4 常用参数设置 本节摘要:绘图函数画出来的图只是"毛坯",真正让它好读、美观的,是一组控制外观的参数——color 定颜色、linestyle 定线型、marker 定标记、xticks 和 yticks 定刻度、legend 定图例。这些参数本质上都是在给 1.2 节讲过的 Artist 对象设置属性。本节按"颜色、线型标记、刻度、图例"四组拆开,讲清每个参数怎么传值、什么时候该调,最后用一张速查表收口,让你把"让图更好看"这件事从碰运气变成有章法。

1.4 常用参数设置

本节摘要:绘图函数画出来的图只是"毛坯",真正让它好读、美观的,是一组控制外观的参数——color 定颜色、linestyle 定线型、marker 定标记、xticks 和 yticks 定刻度、legend 定图例。这些参数本质上都是在给 1.2 节讲过的 Artist 对象设置属性。本节按"颜色、线型标记、刻度、图例"四组拆开,讲清每个参数怎么传值、什么时候该调,最后用一张速查表收口,让你把"让图更好看"这件事从碰运气变成有章法。

阅读收获

阅读完本节,你应当能够:

  1. 用颜色名称、十六进制码、RGB 元组等多种方式给图形指定颜色
  2. 用 linestyle 和 marker 区分同一条坐标系里的多条线
  3. 设置刻度位置和刻度标签,让坐标轴表达更贴合数据含义
  4. 用 label 和 legend 生成图例,并调整图例位置
  5. 判断哪些参数是"必调"、哪些是"锦上添花",避免过度装饰

一、参数都作用在"元素"上

讲参数之前,先回到 1.2 节那个关键心智:Matplotlib 里你看见的一切,底层都是一个 Artist 对象。 一条线是一个 Artist,一个刻度标签是一个 Artist,一个图例也是一个 Artist。所谓"设置参数",本质就是找到那个 Artist,改它的某个属性

color 改的是线条或标记这个 Artist 的颜色属性,linestyle 改的是线条的样式属性,xticks 改的是横轴刻度 Artist 的位置和文字。把这个"按图索骥"的视角立起来,你就不会觉得参数多到记不住——它们只是同一套逻辑在不同元素上的体现。

下面这张图把本节要讲的参数按"作用对象"分了组:

💡 关键直觉:记参数别靠背清单,靠"它改的是哪个元素"。想调线的颜色,就找线相关的 color;想调轴的刻度,就找轴相关的 xticks。分类记住了,名字自然记得住。

二、颜色:最直接也最容易被忽视的表达

颜色是让图"会说话"的第一件武器,也是最容易被滥用的。颜色选得好,几组数据一眼分清;颜色乱配,图再准也读不下去。

Matplotlib 里给颜色有几种写法,效果一样,看哪个顺手:

  • 颜色名称color="red"color="royalblue",直白,适合快速写。
  • 十六进制码color="#FF5733",精确,适合从设计稿里取色。
  • RGB 元组color=(0.1, 0.4, 0.8),每个分量取值 0 到 1,适合程序算出来的颜色。
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3], [1, 2, 3], color="red") # 名称 ax.plot([1, 2, 3], [2, 3, 4], color="#2b6cb0") # 十六进制 ax.plot([1, 2, 3], [3, 4, 5], color=(0.2, 0.7, 0.3)) # RGB 元组

我的建议是:普通图用颜色名称就够,正式报告里需要统一品牌色时再用十六进制。 没必要为了显得专业把所有颜色都写成十六进制——那反而降低可读性。

颜色之外,还有一个 alpha 参数值得一提。它控制透明度,取值 0 到 1。当好几条线叠在一起、或者散点密密麻麻时,把 alpha 调到 0.5 左右,重叠的部分就透出层次,不至于糊成一片。

⚠️ 常见坑:别在一张图里塞太多高饱和颜色。红黄蓝绿紫挤在一起,读者根本分不清谁是谁,还会觉得刺眼。区分数据系列,颜色是辅助,线型和标记同样重要,三样配合着用才稳。

三、线型和标记:区分多线的两件武器

单靠颜色区分多条线,遇到黑白打印或色弱读者就会失效。所以 Matplotlib 给了另外两件武器:线型(linestyle)和标记(marker)。

线型决定线条是实线、虚线还是点线,常用取值:

取值 含义 适用
-solid 实线 默认,主线
--dashed 虚线 区分第二条线
-.dashdot 点划线 第三条线
:dotted 点线 参考线、辅助线

标记决定数据点上画什么符号,常用有 o(圆)、s(方)、^(三角)、*(星)、x(叉)。数据点稀疏时加标记,能让读者看清每个点落在哪。

import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [2, 4, 3, 5], linestyle="-", marker="o", label="实线圆点") ax.plot([1, 2, 3, 4], [3, 1, 4, 2], linestyle="--", marker="s", label="虚线方块") ax.legend()

这里有个很实用的细节:线型、标记、颜色可以压缩成一个字符串一起传。"o--" 表示"圆点标记加虚线","s-" 表示"方块标记加实线",颜色也能塞进去,比如 "ro-" 是"红色圆点实线"。顺序是"标记—线型—颜色"或"颜色—标记—线型",Matplotlib 都能识别。这个快捷写法适合快速探索时用,正式代码里我更倾向把 color、linestyle、marker 分开写——分开写一眼能看清每个值是什么。

💡 关键直觉:颜色、线型、标记是"区分多线"的三件套,别只靠颜色。三种维度叠加,哪怕打印成黑白、或者有读者色弱,数据系列也照样分得清。

四、刻度:让轴"说出人话"

默认情况下,Matplotlib 会自动帮你选刻度位置和刻度文字。但自动不代表合适——你的数据是月份,它给你标 0、1、2、3;你的数据是"低中高",它给你标 -1、0、1。这时候就得自己动手设刻度。

刻度的设置分两层:位置标签。位置决定刻度画在哪,标签决定刻度上写什么。用 xticks(或 yticks)可以一次把两者都设了。

import matplotlib.pyplot as plt months = ["1月", "2月", "3月", "4月", "5月", "6月"] sales = [120, 180, 150, 210, 190, 240] fig, ax = plt.subplots() ax.plot(sales) ax.set_xticks(range(6)) # 刻度位置:0 到 5 ax.set_xticklabels(months) # 刻度标签:换成月份 ax.set_xlabel("月份") ax.set_ylabel("销售额")

这段代码里,set_xticks(range(6)) 把刻度定在 0、1、2、3、4、5 六个位置,set_xticklabels(months) 再把这些位置上的文字换成"1月"到"6月"。两句话配合,横轴就从一串抽象数字变成了能读懂的月份。

刻度之外,还有个范围参数 xlimylim,控制轴显示的最小值和最大值。默认 Matplotlib 会自动把范围收得刚好包住数据,但有时你希望留点余量,或者特意放大某个区间,就手动设:

ax.set_ylim(0, 300) # 纵轴从 0 到 300,别从 120 开始,否则差异被夸大

⚠️ 常见坑:柱状图和折线图的纵轴要不要从 0 开始,是个需要想清楚的问题。从 0 开始能如实反映柱子的高度差异,是柱状图的标准做法;折线图有时为了看清微小波动会截掉底部,但会放大视觉差异,容易误导。取舍的关键是"你想强调差异还是如实呈现"。

五、图例:多线图的"说明书"

图例(legend)是解释每条线、每个颜色代表什么的标注。没有图例,一张画了三条线的图就是三条无名线;有了图例,读者才知道哪条是"实际值"、哪条是"预测值"。

图例的生成分两步:先起名,再显示。 画线时用 label 参数给这条线起名,最后调一次 legend 把所有名字汇总显示出来。

import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [2, 4, 3, 5], label="实际值") ax.plot([1, 2, 3, 4], [3, 1, 4, 2], label="预测值") ax.legend() # 把 label 汇总成图例

legend 还有个 loc 参数控制图例位置,常用的有 "upper right"(右上,默认)、"upper left"(左上)、"lower right"(右下)等。默认位置偶尔会压在数据上,这时候手动指定 loc 挪开就好。

还有一个很容易漏的点:图例本身也是 Artist,它的字号、边框、透明度也都能调。ax.legend(fontsize=9) 就能缩小图例文字。这些小调整累积起来,就是"专业感"的来源。

六、参数速查:什么时候调什么

把本节讲的参数压成一张速查表,方便用时对照:

想调整什么 参数 典型取值 什么时候调
线的颜色 color / c 名称、十六进制、RGB 区分数据系列
透明度 alpha 0 到 1 线多重叠、散点密集
线的样式 linestyle / ls 实线、虚线、点线 黑白打印、色弱友好
点的标记 marker o、s、^、*、x 数据点稀疏
轴的范围 xlim / ylim 两个数 留余量、放大区间
刻度位置 xticks / yticks 位置列表 自定义刻度
刻度文字 标签列表 字符串列表 数字换成语义
图例 label + legend 字符串 + loc 多条线时必加

这张表不是让你背的,是让你在"想调某处却不知道参数名"时有个索引。真正记住它们的办法,还是那句老话——动手画,改一个参数看一次变化,比读十遍表管用。

💡 关键直觉:参数是"锦上添花"还是"必须加",看一件事——没有它,读者会不会误解图? 会误解,就是必调(比如多线图没有图例);不会误解,只是好看,就量力而行。别为了"装饰"把图堆成一锅粥。

七、标题、标签、网格:让图"自我说明"

前面重点讲了颜色、线型、标记、刻度、图例,但还有一组"文字类"参数同样基础——标题、轴标签、网格。它们不花哨,却决定了一张图能不能被"独立读懂":没有标题和轴标签的图,离开上下文就是一堆形状,别人根本不知道它画的是什么。

  • 标题ax.set_title 给整张图一个名字,说明"这张图在说什么"。
  • 轴标签ax.set_xlabelax.set_ylabel 说明横纵轴各代表什么量、单位是什么。
  • 网格ax.grid 打开背景网格线,帮读者把数据点对到坐标值上。
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [2, 4, 3, 5]) ax.set_title("月度销售趋势") ax.set_xlabel("月份") ax.set_ylabel("销售额(万元)") ax.grid(True, linestyle=":", alpha=0.5)

这三样里,网格最容易被忽略,但它对"精确读数"的帮助很大:一条数据线从 3 月的哪个高度经过,有网格线做参照,一眼就能估出数值;没网格,只能靠猜。折线图、散点图加淡色网格,几乎是性价比最高的可读性提升。

还有 fontsize 这个通用参数,几乎所有文字类元素都能设它,控制字号——标题、标签、图例的字号都可以单独调。字号统一且大小合适,是"专业感"里很不起眼但很加分的一环。

八、别让"装饰"喧宾夺主

参数多了,最大的风险不是记不住,而是忍不住全用上。颜色涂满、标记塞满、网格加粗、图例加框,最后图变成一锅粥。真正成熟的图,往往是克制的。

判断一个参数该不该加,回到前面那句标准:没有它,读者会不会误解或读不懂? 会,就加;不会,只是"看起来更花哨",就三思。这不是说要把图画得素,而是说每个修饰都要有理由——颜色用来区分系列,网格用来辅助读数,图例用来解释系列,标记用来标出关键点。如果某样东西说不出"为什么要它",那它多半可以删掉。

一个实用的检查方法是:把图缩小到缩略图大小,还能不能一眼看出重点? 能,说明层次清楚;不能,说明信息过载,需要做减法。这个"缩略图测试"比任何美学理论都管用。

⚠️ 别本末倒置:参数是给"已经正确的图"锦上添花的,它救不了一张选错了图形、或数据本身混乱的图。先把图形选对、把数据想清楚,再来谈颜色和线型,顺序不能反。

九、两个关于参数的高频疑问

参数写在 plot 里,和用 set 方法设,有区别吗?

大多数情况下没有本质区别,只是入口不同。ax.plot(x, y, color="red") 是画的同时一并指定颜色;ax.set_title 这类方法是画完之后再改某个元素的属性。前者适合"画的同时定死外观",后者适合"画完再逐项调整"。用哪个看习惯,效果一样。

为什么我设了颜色,图还是默认色?

最常见的原因是参数名写错,或写错了位置。比如把 color 写成了 colour(Matplotlib 用的是美式拼写 color),或者把它当成了某个 set 方法去调。颜色是写在绘图函数里的关键字参数。遇到"设了没反应",先检查参数名拼写和它该出现的位置。

本节速览

  • 参数本质是给 Artist 对象设属性,按"改哪个元素"来归类,比背清单好记。
  • 颜色三种写法:名称、十六进制、RGB 元组;普通图用名称,正式报告用十六进制。
  • 区分多线靠三件套:颜色、线型、标记,别只靠颜色,要兼顾黑白打印和色弱读者。
  • 线型标记颜色可压缩成字符串(如 "ro-"),快速探索时方便,正式代码建议分开写。
  • 刻度分位置和标签两层set_xticks 定位置,set_xticklabels 定文字。
  • 纵轴是否从 0 开始要想清楚,柱状图宜从 0,折线图截底会夸大差异。
  • 图例先 label 起名、再 legend 显示,多线图没有图例就是无名线。

下一节我们把画好的图"交付"出去——怎么用 savefig 把图存成文件,格式怎么选、DPI 怎么定、透明背景和裁剪空白这些细节各有什么门道。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U