Matplotlib学习
1.可视化介绍
可视化的优点:让数据背后的规律、异常、趋势一目了然。
数据可视化的原则:
- 信:准确表达、避免可视化的误导性
- 达:高效传达,有效信息直接高效传达
- 雅:赏心悦目,设计美观的可视化(布局、配色)
常见图表:

2.Matplotlib
Matplotlib是 Python 最基础的二维绘图库,由 John D. Hunter 开发。
- 作用:用于生成静态、矢量格式的数据可视化图表(折线、柱状、散点、饼图、子图等),支持导出图片 (png、svg、pdf)。
- 环境:第三方库,需要安装
pip install matplotlib;常和 numpy 配合使用;jupyter、pycharm 均可运行。 - 核心模块:pyplot(
matplotlib.pyplot)是常用接口,简单命令式绘图;也支持面向对象绘图(精细控制画布、坐标轴)。 - 特点:灵活性强,可以精细调整字体、刻度、颜色;缺点:默认样式比较朴素;于是衍生出 seaborn(基于 matplotlib,美化)。
(一)折线图plot
# 绘制折线图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' # mac:STHeiti
# rcParams['font.sans-serif'] = 'SimHei'
# 创建图表,设置大小
plt.figure(figsize=(10,5)) # 画布
# 绘图的数据
month = ['1月','2月','3月','4月']
sales = [100,150,80,130]
# 绘制折线图
plt.plot(month,sales,label='产品A')
# 添加标题
plt.title('2025年销售趋势',color = 'red',fontsize = 20)
#添加坐标轴的标签
plt.xlabel('月份',fontsize=10)
plt.ylabel('销售额(万元)',fontsize=10)
# 添加图例
plt.legend(loc = 'upper left')
# 添加网格线
plt.grid(True,alpha=0.1,color='blue',linestyle='--') # x,y轴都有 alpha:设置网格线透明度 plt.grid(axis = 'y')
# 设置刻度字体大小
plt.xticks(roation=0,fontsize=12) # roation 控制旋转角度
plt.yticks(roation=0,fontsize=12)
# 设置y轴的范围
plt.ylim(0,160)
# 在每个数据点上显示数值
for x,y in zip(month,sales):
plt.text(x,y+1,str(y),ha='center',va='bottom',fontsize=10)
# 显示图表
plt.show()

(二)条形图
# 绘制柱状图
import matplotlib.pyplot as plt
from matplotlib import rcParams # 字体
rcParams['font.family'] = 'SimHei' # mac:STHeiti
# rcParams['font.sans-serif'] = 'SimHei'
# 创建图表,设置大小
plt.figure(figsize=(10,5)) # 画布
subjects = ['语文','数学','英语','科学']
scores = [85,92,78,88]
# 绘制柱状图
plt.bar(subjects,scores,label='小红')
# 自动优化排版
plt.tight_layout()
plt.show()
import matplotlib.pyplot as plt
# 数据,从上到下的国家
country_list = ["India", "Germany", "Japan", "China", "United States"]
gdp_data = [10, 22, 43, 77, 93]
# 设置画布大小
plt.figure(figsize=(14,8))
# 绘制水平条形图,橙黄色
bars = plt.barh(country_list, gdp_data, color="#f59c34")
# 设置标题,红色
plt.title("2025年GDP排名", fontsize=30, color="#c82222")
plt.xlabel("GDP", fontsize=17)
plt.ylabel("国家", fontsize=17)
# 设置x轴刻度
plt.xticks([0, 20, 40, 60, 80], fontsize=15)
plt.yticks(fontsize=15)
# 反转y轴,保证第一个国家India出现在图表最上方
plt.gca().invert_yaxis()
plt.tight_layout()
plt.show()

(三)饼图
import matplotlib.pyplot as plt
# 数据
labels = ["学习", "娱乐", "运动", "睡觉", "其他"]
sizes = [25.0, 16.7, 4.2, 33.3, 20.8]
colors = ["#4a98f5", "#88f288", "#ffd090", "#ee9494", "#e83e96"]
plt.figure(figsize=(9,9))
# autopct显示百分比
plt.pie(sizes,
labels=labels,
colors=colors,
autopct="%1.1f%%",
startangle=90)
plt.title("一天的时间分布", fontsize=26, color="#bb2222")
plt.axis("equal") # 设置正圆,饼图必须!
plt.show()

import matplotlib.pyplot as plt
from matplotlib import rcParams
rcParams["font.sans-serif"] = ["SimHei"]
# --------数据
labels = ["学习", "娱乐", "运动", "睡觉", "其他"]
sizes = [25.0, 16.7, 4.2, 33.3, 20.8]
colors = ["#4899f1", "#82ee82", "#ffcc90", "#ee9090", "#e842a0"]
plt.figure(figsize=(9,9))
# wedgeprops 设置圆环宽度,实现甜甜圈环形饼图
plt.pie(sizes,
labels=labels,
colors=colors,
autopct="%1.1f%%",
startangle=90,
wedgeprops={'width':0.5},
pctdistance=0.6) # 设置百分比的位置
plt.title("一天的时间分布", fontsize=28, color="#bb2020")
plt.axis("equal")
plt.show()

(四)散点图
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(12)
# 基础线性关系 y ≈2.5*x,再加上随机噪声
x = np.linspace(0,10,1200)
noise = np.random.normal(loc=0, scale=2.2, size=len(x))
y = 2.5 * x + noise
plt.figure(figsize=(11,8))
plt.scatter(x,y,color='#3048d8',s=12,label="数据")
plt.title("X变量与Y变量的关系",fontsize=22,color='#bb2222')
plt.xlabel("X自变量",fontsize=13)
plt.ylabel("Y因变量",fontsize=13)
plt.xlim(-0.5,10.5)
plt.ylim(0,30)
plt.xticks([0,2,4,6,8,10])
plt.yticks([0,5,10,15,20,25,30])
plt.legend(loc='upper left')
plt.grid(alpha=0.3,linestyle='--')
plt.show()

(五)箱线图

import matplotlib.pyplot as plt
# 模拟 3 门课的成绩
data = {
'语文': [82, 85, 88, 70, 90, 76, 84, 83, 95],
'数学': [75, 80, 79, 93, 88, 82, 87, 89, 92],
'英语': [70, 72, 68, 65, 78, 89, 85, 90, 95]
}
plt.figure(figsize=(8, 6))
# 绘制箱线图;tick_labels 设置x轴标签
plt.boxplot(data.values(), tick_labels=data.keys())
plt.title("各科成绩分布(箱线图)")
plt.ylabel("分数")
# 只显示y方向网格,虚线,透明度0.5
plt.grid(True, axis='y', linestyle='--', alpha=0.5)
plt.show()

3.多个图的绘制方法
import matplotlib.pyplot as plt
# 要绘制的数据
month = ['1,','2,','3','4']
sales = [100,150,80,130]
f1 = plt.subplot(2,2,1) # 整个画布划分成 2 行 × 2 列 选中第 1 块子区域,在这块区域上绘图
f1.plot(month,sales)
f2 = plt.subplot(2,2,2)
f2.bar(month,sales)

4.seaborn学习
核密度估计图 (KDE 图):用来展示连续型数值数据的概率分布。
相当于平滑之后的直方图;直方图是一块块柱子,KDE 是一条平滑的曲线。
- x:变量取值;y:密度(不是频次!)
- 曲线越高,代表这个数值附近的数据越密集。
- 作用:观察数据集中在哪里,是单峰、双峰,左偏还是右偏。
import pandas as pd
import seaborn as sns
import matplotlib,pyplot as plt
plt.rcParams["font.sans-serif"] = ["STHeiti"]
penguis = pd.read_csv("你的文件路径")
penguis.dropna(inplace = True)
penguis.info()
# 直方图
sns.histplot(data=penguins,x="species")
# 核密度估计图
sns.kdeplot(data=penguins,x="bill_length_mm")
sns.histplot(data=penguins,x="bill_length_mm",kde=True)
浙公网安备 33010602011771号