Python matplotlib画折线图:从零绘制带标记的趋势曲线
用Python matplotlib画折线图的完整教程,包含中文乱码解决、标记点、坐标轴标签、网格线和保存图片,可直接复制运行,适合数据趋势分析入门。
场景痛点
做周报月报时,最常干的一件事就是把一组日期数据画成折线图。用Excel手动画,每次改数据都要重新选区域、调颜色、加标题,字体还经常乱码。数据量一大、多对比几条线,操作就更繁琐。用Python的matplotlib写一次脚本,以后只要换数据源,一键就能出图,图表风格还能完全统一。
用到的库
pip install matplotlib pandas
完整代码
# 导入绘图库并配置中文
import matplotlib
matplotlib.use("Agg") # 无界面环境下也能保存图片
import matplotlib.pyplot as plt
# 解决中文乱码和负号显示问题
matplotlib.rcParams["font.sans-serif"] = ["SimHei", "Microsoft YaHei", "Arial Unicode MS"]
matplotlib.rcParams["axes.unicode_minus"] = False
def draw_line_chart():
# 模拟一周的销售额数据
days = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
sales_a = [120, 150, 135, 180, 210, 260, 240]
sales_b = [90, 110, 100, 130, 170, 200, 190]
# 创建画布,设置尺寸
plt.figure(figsize=(10, 6))
# 绘制两条折线,带圆点标记
plt.plot(days, sales_a, marker="o", linewidth=2, label="门店A")
plt.plot(days, sales_b, marker="s", linewidth=2, label="门店B")
# 设置标题和坐标轴标签
plt.title("一周销售额趋势对比", fontsize=16)
plt.xlabel("星期", fontsize=12)
plt.ylabel("销售额(万元)", fontsize=12)
# 显示图例和网格
plt.legend()
plt.grid(linestyle="--", alpha=0.5)
# 保存为高清图片
plt.tight_layout()
plt.savefig("line_chart.png", dpi=150)
plt.close()
print("折线图已保存为 line_chart.png")
if __name__ == "__main__":
draw_line_chart()
代码讲解
matplotlib.use("Agg"):在没有图形界面的服务器上也能正常出图,避免弹窗报错。rcParams两行配置是中文不乱码的关键,font.sans-serif指定中文字体,axes.unicode_minus=False让负号正常显示。plt.plot()的marker参数控制数据点标记形状,o是圆点、s是方块,linewidth控制线条粗细。label配合plt.legend()生成图例,grid加虚线网格方便读数。savefig(dpi=150)控制图片清晰度,tight_layout()防止标题和标签被裁切。
运行结果
运行后当前目录生成 line_chart.png,图中包含周一到周日两条销售趋势线,带数据点标记、图例和网格线,中文标题正常显示。打开图片确认两条线走势即可。
注意事项
- 中文乱码是最常见问题:Windows用
Microsoft YaHei,Mac用Arial Unicode MS,Linux需先安装中文字体再填字体名。 plt.show()和plt.savefig()不能同时用,保存前不要调用show(),否则会存成空白图。- 折线图适合展示连续时间序列,类别型数据更适合柱状图。

更新时间:2026-09-14 20:31:02
上一篇:Python matplotlib画饼图:带百分比标签的占比图