plot()画线平直是因默认用数组索引作x轴,需显式传入x和y;中文显示方块须配置中文字体;多线易撞色应指定color参数;保存图片需在show前设dpi和figsize。

plot() 画出来的线是平的,不是预期的趋势?
默认情况下 plot() 按数组索引当 x 轴,如果你只传了 y 值(比如 plt.plot(y_data)),它会画成「从 0 开始递增的整数横坐标」,看起来像趋势,但实际没对齐真实时间或序号。尤其当你的 y_data 是从某段中间截取的,或者本身带时间戳,这种“自动编号”会让图形完全失真。
- 正确做法:显式传入 x 和 y,比如
plt.plot(x_timestamps, y_values) - 常见错误:用
pd.Series.plot()时忘了设x参数,结果横轴变成 0, 1, 2… - 注意
list、np.array、pd.Series的长度必须一致,否则报错ValueError: x and y must have same first dimension - 如果 x 是字符串(如月份名),Matplotlib 会按字典序排,不是你想要的时间顺序——得先转成
datetime或用pd.Categorical控制顺序
中文标签显示为方块,字体不生效?
Matplotlib 默认不支持中文,plt.xlabel("时间") 会直接出一堆方块。这不是编码问题,是字体缺失。临时解决快,但别靠改全局配置文件——那会影响其他项目。
- 最稳写法:每次绘图前加两行
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']和plt.rcParams['axes.unicode_minus'] = False - 注意
'SimHei'在 macOS/Linux 上不存在,换成'Heiti TC'或'Noto Sans CJK SC';用fc-list :lang=zh可查本地中文字体名 - 如果用了
plt.style.use('seaborn'),它可能覆盖你的字体设置,得在style.use之后再设一次rcParams - 导出 PDF 时方块更顽固,建议加
plt.rcParams['pdf.fonttype'] = 42,让字体嵌入
多条线叠在一起颜色一样、分不清?
plot() 连续调用默认按内置颜色循环(蓝、橙、绿……),但如果你反复运行同一段代码、或用了子图(ax.plot())却没清空,颜色就容易撞车。更麻烦的是,不同 Python 环境里颜色循环顺序还可能不一样。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 显式指定颜色最可靠:
plt.plot(x, y1, color='C0', label='A')、plt.plot(x, y2, color='C1', label='B') - 避免用
'r'、'g'这类单字母缩写,它们不支持 alpha 且语义弱;优先用'#1f77b4'十六进制或'C0'这类分类色 - 图例(
plt.legend())必须和label参数配对,漏写label就白搭 - 如果数据点少,线型(
linestyle='--')比颜色更容易区分,尤其打印灰度稿时
保存图片模糊、字体发虚、尺寸不对?
plt.savefig('trend.png') 直接调用,默认分辨率低(约 100 DPI)、尺寸小(6.4×4.8 英寸),放大就糊;而且保存时机不对,比如在 plt.show() 之后调用,可能存到空图。
- 务必在
plt.show()前保存,且推荐加bbox_inches='tight'防标题/图例被裁 - 需要高清图:加
dpi=300(论文/印刷)或dpi=150(屏幕展示) - 控制画布大小:创建 figure 时指定,如
plt.figure(figsize=(10, 6)),别等画完再缩放 - PNG 适合网页,PDF/SVG 更适合插入 LaTeX 或做矢量编辑;但 SVG 中文字体可能丢失,得用
plt.rcParams['svg.fonttype'] = 'none'
真正难的不是画出一条线,而是确保 x 轴刻度对应业务含义、所有文字在各种输出场景下都可读、多图之间风格能对齐——这些细节不会报错,但会悄悄让别人看不懂你的图。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










