当前位置: 首页 > news >正文

Python爬虫实战㉒|Matplotlib基础,画出专业级数据图表


author: 专注Python实战,分享爬虫与数据分析干货
title: Python爬虫实战㉒|Matplotlib基础,画出专业级数据图表
update: 2026-04-26
tags: Python,Matplotlib,可视化,折线图,柱状图,散点图,饼图,图表

作者:专注Python实战,分享爬虫与数据分析干货
更新时间:2026年4月
适合人群:有Pandas基础、想让数据"说话"的开发者


前言:一图胜千言

10万条数据堆在表格里,老板看不懂。画成图表,5秒理解。

Matplotlib = Python可视化的基石。所有高级图表库(Seaborn、Pyecharts)都基于它。


一、基础配置

1.1 安装与中文字体

pipinstallmatplotlib-ihttps://pypi.tuna.tsinghua.edu.cn/simple
importmatplotlib.pyplotaspltimportmatplotlib# 中文字体配置(Windows)matplotlib.rcParams["font.sans-serif"]=["SimHei"]# 黑体matplotlib.rcParams["axes.unicode_minus"]=False# 负号正常显示# 或者用微软雅黑matplotlib.rcParams["font.sans-serif"]=["Microsoft YaHei"]

1.2 第一个图表

importmatplotlib.pyplotasplt# 数据x=[1,2,3,4,5]y=[10,25,18,30,22]# 画图plt.figure(figsize=(8,5))# 图表大小plt.plot(x,y)# 折线图plt.title("销售趋势")# 标题plt.xlabel("月份")# X轴标签plt.ylabel("销量")# Y轴标签plt.grid(True,alpha=0.3)# 网格线plt.savefig("sales_trend.png",dpi=150,bbox_inches="tight")# 保存plt.show()

二、常用图表类型

2.1 折线图(趋势)

importmatplotlib.pyplotaspltimportnumpyasnp months=[f"{i}月"foriinrange(1,13)]sales_A=[100,120,115,130,140,155,160,170,165,180,190,210]sales_B=[80,95,90,100,110,120,125,135,130,145,150,165]plt.figure(figsize=(10,6))plt.plot(months,sales_A,"o-",label="产品A",color="#4472C4",linewidth=2,markersize=6)plt.plot(months,sales_B,"s--",label="产品B",color="#ED7D31",linewidth=2,markersize=6)plt.title("月度销售趋势对比",fontsize=16,fontweight="bold")plt.xlabel("月份",fontsize=12)plt.ylabel("销量",fontsize=12)plt.legend(fontsize=12)plt.grid(True,alpha=0.3)plt.tight_layout()plt.savefig("line_chart.png",dpi=150)plt.show()

2.2 柱状图(对比)

categories=["手机","电脑","耳机","键盘","显示器"]sales=[450,320,580,290,210]colors=["#4472C4","#ED7D31","#A5A5A5","#FFC000","#5B9BD5"]plt.figure(figsize=(8,5))bars=plt.bar(categories,sales,color=colors,width=0.6,edgecolor="white")# 添加数值标签forbar,valinzip(bars,sales):plt.text(bar.get_x()+bar.get_width()/2,bar.get_height()+10,str(val),ha="center",va="bottom",fontsize=12,fontweight="bold")plt.title("各品类销量对比",fontsize=16,fontweight="bold")plt.ylabel("销量",fontsize=12)plt.ylim(0,max(sales)*1.15)plt.tight_layout()plt.savefig("bar_chart.png",dpi=150)plt.show()

2.3 水平柱状图(排名)

products=[f"产品{i}"foriinrange(1,11)]values=sorted(np.random.randint(100,500,10))colors=plt.cm.RdYlGn(np.linspace(0.2,0.8,len(products)))plt.figure(figsize=(8,6))plt.barh(products,values,color=colors,height=0.6)plt.title("产品销量排名",fontsize=16,fontweight="bold")plt.xlabel("销量",fontsize=12)plt.tight_layout()plt.savefig("barh_chart.png",dpi=150)plt.show()

2.4 散点图(相关性)

np.random.seed(42)price=np.random.uniform(100,5000,100)sales=1000-price*0.15+np.random.normal(0,50,100)plt.figure(figsize=(8,6))plt.scatter(price,sales,alpha=0.6,c="#4472C4",s=50,edgecolors="white")# 添加趋势线z=np.polyfit(price,sales,1)p=np.poly1d(z)plt.plot(price,p(price),"r--",linewidth=2,label=f"趋势线: y={z[0]:.2f}x+{z[1]:.0f}")plt.title("价格与销量关系",fontsize=16,fontweight="bold")plt.xlabel("价格",fontsize=12)plt.ylabel("销量",fontsize=12)plt.legend(fontsize=12)plt.grid(True,alpha=0.3)plt.tight_layout()plt.savefig("scatter_chart.png",dpi=150)plt.show()

2.5 饼图(占比)

labels=["手机","电脑","耳机","其他"]sizes=[35,25,20,20]colors=["#4472C4","#ED7D31","#A5A5A5","#FFC000"]explode=(0.05,0,0,0)# 突出显示第一个plt.figure(figsize=(8,8))plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct="%1.1f%%",startangle=90,textprops={"fontsize":14})plt.title("品类销售占比",fontsize=16,fontweight="bold")plt.tight_layout()plt.savefig("pie_chart.png",dpi=150)plt.show()

2.6 直方图(分布)

np.random.seed(42)prices=np.random.lognormal(mean=7.5,sigma=0.5,size=1000)plt.figure(figsize=(8,5))plt.hist(prices,bins=30,color="#4472C4",edgecolor="white",alpha=0.8)plt.axvline(np.mean(prices),color="red",linestyle="--",label=f"均值:{np.mean(prices):.0f}")plt.axvline(np.median(prices),color="green",linestyle="--",label=f"中位数:{np.median(prices):.0f}")plt.title("商品价格分布",fontsize=16,fontweight="bold")plt.xlabel("价格",fontsize=12)plt.ylabel("数量",fontsize=12)plt.legend(fontsize=12)plt.tight_layout()plt.savefig("hist_chart.png",dpi=150)plt.show()

三、子图(subplot)

fig,axes=plt.subplots(2,2,figsize=(12,10))# 子图1:折线图axes[0,0].plot(months,sales_A,"o-",color="#4472C4")axes[0,0].set_title("月度趋势")# 子图2:柱状图axes[0,1].bar(categories,sales,color=colors)axes[0,1].set_title("品类对比")# 子图3:散点图axes[1,0].scatter(price,sales,alpha=0.5,c="#4472C4")axes[1,0].set_title("价格-销量关系")# 子图4:饼图axes[1,1].pie(sizes,labels=labels,colors=colors,autopct="%1.1f%%")axes[1,1].set_title("品类占比")fig.suptitle("数据分析仪表板",fontsize=18,fontweight="bold")plt.tight_layout()plt.savefig("dashboard.png",dpi=150)plt.show()

四、知识卡

图表类型函数适用场景
折线图plt.plot()趋势变化
柱状图plt.bar()类别对比
水平柱状图plt.barh()排名
散点图plt.scatter()相关性
饼图plt.pie()占比
直方图plt.hist()分布
子图plt.subplots()多图组合

五、课后作业

必做题:

  1. 画出折线图展示月度趋势
  2. 画柱状图对比不同类别
  3. 画散点图分析两个变量的关系

选做题:

  1. 用subplot制作4合1仪表板
  2. 保存高清图片用于报告

有问题欢迎评论区留言,大家一起讨论!


标签:Python | Matplotlib | 可视化 | 折线图 | 柱状图 | 散点图 | 饼图

http://www.jsqmd.com/news/849169/

相关文章:

  • 2026年口碑好的贵阳暴龙眼镜公司对比推荐 - 品牌宣传支持者
  • 影像技术实战17:图片格式转换踩坑复盘:PNG、JPEG、WebP、透明通道与颜色模式的工程处理方案
  • 【199管理类联考】数学75考点(基础)
  • 别再手动拖拽了!用Java POI + XSSFDrawing,5行代码搞定Excel单元格图片批量插入(附完整源码)
  • 一文读懂天镜灯、台灯、LED 照明、恒流灯带、UVC 紫外杀毒灯驱动芯片,专业厂家优选谦诚半导体 - 栗子测评
  • QT的C++接口基础用法
  • 告别格式大战!用VSCode的Prettier插件拯救你的代码洁癖(含保存即格式化、快捷键技巧)
  • 完全开源的语言模型学习记录--Dispersion Loss 降低小模型坍缩
  • 三维动画心得:从入门到认知
  • ARMv8-A架构AArch64异常处理机制详解
  • 如何实现TVA与RV的协同进化?
  • 源头电主轴厂家推荐!顺源精密专注进口电主轴维修,自研高速精密电主轴,告诉你电主轴哪家好,行业口碑优选 - 栗子测评
  • 别再让一条宽带拖慢整个公司!手把手教你用H3C防火墙配置双WAN口负载均衡(附HCL模拟器配置)
  • Java并发编程高频面试题附深度扩展
  • 禅论算法引擎:通达信K线结构智能解析系统深度剖析
  • 影像技术实战18:视频静音检测不准?FFmpeg silencedetect + 非静音片段生成完整方案
  • 想省时间、提效率?SOLIDWORKS 库特征值得每一位工程师试试
  • ETime:高效推动你的时间
  • 国内诚信工业厂房搭建源头厂家优选|顶天钢结构一站式施工解决方案,工业厂房搭建/搭建工业厂房,工业厂房搭建团队推荐 - 品牌推荐师
  • TXID详解
  • Langchain的学习(一)
  • C++(模拟法下练习题)
  • 杭州即刻飞行体育文化传播有限公司2026上海滑翔伞培训机构优选:江浙沪滑翔伞培训机构含考证费用与考证攻略推荐杭州即刻飞行 - 栗子测评
  • RabbitMQ 集群网络分区如何配置分区处理策略
  • 别再只会用阻塞式了!STM32CubeMX串口非阻塞收发实战(附LED灯控制案例)
  • 从沙子到车辙(1.1):什么是“计算”?
  • 手机店还会存在吗
  • 快速将现有基于OpenAIAPI的项目迁移至Taotoken平台指南
  • Zemax序列模式模拟双折射:手把手教你用多重组态同时追迹o光和e光
  • 2026杭州弱电工程哪家专业?智能照明/监控安防系统/机房施工公司实力盘点 - 栗子测评