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/simpleimportmatplotlib.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() | 多图组合 |
五、课后作业
必做题:
- 画出折线图展示月度趋势
- 画柱状图对比不同类别
- 画散点图分析两个变量的关系
选做题:
- 用subplot制作4合1仪表板
- 保存高清图片用于报告
有问题欢迎评论区留言,大家一起讨论!
标签:Python | Matplotlib | 可视化 | 折线图 | 柱状图 | 散点图 | 饼图
