• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
汜水
博客园    首页    新随笔    联系   管理    订阅  订阅

Matplotlib学习

1.可视化介绍

可视化的优点:让数据背后的规律、异常、趋势一目了然。

数据可视化的原则:

  • 信:准确表达、避免可视化的误导性
  • 达:高效传达,有效信息直接高效传达
  • 雅:赏心悦目,设计美观的可视化(布局、配色)

常见图表:

image

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()

image

(二)条形图

# 绘制柱状图
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()

image

(三)饼图

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()

image

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()

image

(四)散点图

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()

image

(五)箱线图

image

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()

image

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)

image

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)

 

posted on 2026-09-20 21:31  汜水  阅读(14)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3