5.数据分析Matplotlib(数据可视化)

1.折线图(趋势数据分析)

python 复制代码
# 导入必要的库
import pandas as pd  # 用于数据处理与表格操作
import matplotlib.pyplot as plt  # 用于数据可视化,绘制图表

# 创建数据:以字典形式定义每个月的三个产品的销量
data = {
    '月份': ['1月', '2月', '3月', '4月', '5月', '6月',
             '7月', '8月', '9月', '10月', '11月', '12月'],  # x轴:时间(月份)
    '产品A': [120, 135, 150, 145, 160, 170,  # y轴:产品A每月销量
              165, 180, 175, 190, 185, 200],
    '产品B': [90, 95, 105, 110, 115, 120,   # 产品B每月销量
              125, 130, 135, 140, 145, 150],
    '产品C': [70, 75, 80, 85, 90, 95,      # 产品C每月销量
              100, 105, 110, 115, 120, 125]
}

# 将字典转换为 pandas 的 DataFrame,便于后续处理和绘图
df = pd.DataFrame(data)

# =========================
# 开始使用 matplotlib 绘图
# =========================

# 1.设置中文字体支持(否则中文可能显示为方块或乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体显示中文
plt.rcParams['axes.unicode_minus'] = False    # 解决负号'-'显示为方块的问题

# 2.创建一个画布和坐标轴对象(fig: 整个图像,ax: 坐标轴)
fig, ax = plt.subplots(figsize=(10, 6))  # 设置图像大小为宽10英寸,高6英寸

# 3.绘制三条折线,分别代表 产品A、产品B、产品C 的销量变化
# 参数说明:
# x: x轴数据(月份)
# y: y轴数据(销量)
# label: 图例中显示的名称
# marker: 数据点标记样式(如 'o' 表示圆点)
# linewidth: 线条粗细
# color: 线条颜色(可选,可自定义如 'red', '#1f77b4' 等)
ax.plot(df['月份'], df['产品A'], label='产品A', marker='o', linewidth=2, color='blue')
ax.plot(df['月份'], df['产品B'], label='产品B', marker='s', linewidth=2, color='green')
ax.plot(df['月份'], df['产品C'], label='产品C', marker='^', linewidth=2, color='red')

# 4.添加图表标题
ax.set_title('2024年各月份产品销量趋势图', fontsize=16, fontweight='bold')

# 5.添加x轴和y轴标签
ax.set_xlabel('月份', fontsize=12)
ax.set_ylabel('销量(件/月)', fontsize=12)

# 6.添加图例(显示每条线代表什么),并设置图例位置为右上角
ax.legend(loc='upper left')

# 7.设置x轴刻度标签旋转角度(避免月份重叠,提升可读性)
plt.xticks(rotation=45)

# 8.添加网格线(便于观察数值),alpha控制透明度
ax.grid(True, alpha=0.3)

# 9.自动调整布局,防止标签被截断
plt.tight_layout()

# 10.显示图表
plt.show()

2.条形图(数据之间的对比)

python 复制代码
# 导入必要的库
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np  # 用于生成条形图的定位点

# 原始数据
data = {
    '月份': ['1月', '2月', '3月', '4月', '5月', '6月',
             '7月', '8月', '9月', '10月', '11月', '12月'],
    '产品A': [120, 135, 150, 145, 160, 170, 165, 180, 175, 190, 185, 200],
    '产品B': [90, 95, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150],
    '产品C': [70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125]
}

# 转为 DataFrame
df = pd.DataFrame(data)

# 1.设置中文字体,避免中文乱码
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 2.创建画布
plt.figure(figsize=(12, 6))

# 3.设定条形的宽度
bar_width = 0.25

# 4.获取月份作为x轴的索引位置
x = np.arange(len(df['月份']))  # [0, 1, 2, ..., 11]

# 5.绘制三个产品的条形图,通过调整x的位置实现并排(分组条形图)
plt.bar(x - bar_width, df['产品A'], width=bar_width, label='产品A', color='blue')
plt.bar(x, df['产品B'], width=bar_width, label='产品B', color='green')
plt.bar(x + bar_width, df['产品C'], width=bar_width, label='产品C', color='red')

# 6.添加图表标题和轴标签
plt.title('2024年各月份产品销量对比(分组条形图)', fontsize=16)
plt.xlabel('月份', fontsize=12)
plt.ylabel('销量(件)', fontsize=12)

# 7.设置x轴刻度位置和标签
plt.xticks(x, df['月份'], rotation=45)  # 让月份居中显示,并适当旋转避免重叠

# 8.添加图例
plt.legend()

# 9.添加网格(可选,便于观察数值)
plt.grid(axis='y', alpha=0.3)

# 10自动调整布局
plt.tight_layout()

# 11.显示图表
plt.show()

3.饼图(比例分布)

python 复制代码
# 导入必要的库
import pandas as pd
import matplotlib.pyplot as plt

# 原始销售数据
data = {
    '月份': ['1月', '2月', '3月', '4月', '5月', '6月',
             '7月', '8月', '9月', '10月', '11月', '12月'],
    '产品A': [120, 135, 150, 145, 160, 170, 165, 180, 175, 190, 185, 200],
    '产品B': [90, 95, 105, 110, 115, 120, 125, 130, 135, 140, 145, 150],
    '产品C': [70, 75, 80, 85, 90, 95, 100, 105, 110, 115, 120, 125]
}

# 转为 DataFrame
df = pd.DataFrame(data)

# 1.计算各产品的总销量
产品A总销量 = df['产品A'].sum()  # 12个月加总
产品B总销量 = df['产品B'].sum()
产品C总销量 = df['产品C'].sum()

# 2.构建饼图所需数据
labels = ['产品A', '产品B', '产品C']          # 每一块的标签
sizes = [产品A总销量, 产品B总销量, 产品C总销量]  # 每一块的数值
colors = ['lightblue', 'lightgreen', 'lightcoral']  # 每一块的颜色(可选)
explode = (0, 0.1, 0)  # 突出显示第2块(产品B),值越大突出越明显

# 3.设置中文字体(防止中文显示为方块)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 4.创建饼图
plt.figure(figsize=(8, 8))  # 设置画布大小
plt.pie(sizes,
        labels=labels,           # 每一块的标签
        colors=colors,           # 每一块颜色
        autopct='%1.1f%%',       # 显示百分比,保留1位小数
        startangle=90,           # 起始角度(90度,从顶部开始)
        explode=explode,         # 突出显示某一块
        shadow=True,             # 是否显示阴影(立体感)
        )

# 5.添加标题
plt.title('2024年各产品总销量占比(饼图)', fontsize=16)

# 6.显示图表
plt.show()

4.散点图(两变量之间的相关性)

python 复制代码
# 导入必要的库
import matplotlib.pyplot as plt
import numpy as np  # 用于生成模拟数据(也可用真实数据)

# 🎲 模拟一组数据(也可以替换成你的真实数据,比如从 CSV、Excel、DataFrame 读取)
np.random.seed(42)  # 设置随机种子,保证每次运行结果一致

# 模拟广告投入(x轴,单位:万元)
x = np.random.randint(1, 50, size=50)  # 50个样本,范围 1~49 万元

# 模拟销量(y轴,与x有一定相关性,但也加入随机扰动)
y = 2 * x + np.random.normal(0, 20, size=50)  # 基础线性关系 + 噪声

# 设置中文字体(防止中文显示乱码)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 创建画布
plt.figure(figsize=(8, 6))

# 绘制散点图
plt.scatter(x, y,
            s=60,                # 每个点的大小
            c='blue',            # 每个点的颜色(可设为列表实现多色)
            alpha=0.7,           # 透明度(0透明 ~ 1不透明)
            marker='o',          # 点的形状,'o'是圆点,也可以是 's'(方块)、'^'(三角)等
            edgecolors='black',  # 点的边框颜色
            label='广告投入 vs 销量'  # 图例标签
            )

# 添加标题和坐标轴标签
plt.title('广告投入与产品销量散点图', fontsize=16)
plt.xlabel('广告投入(万元)', fontsize=12)
plt.ylabel('产品销量(件)', fontsize=12)

# 添加图例
plt.legend()

# 添加网格(便于观察数值趋势)
plt.grid(True, alpha=0.3)

# 显示图表
plt.show()

5.箱线图(数据分布范围和异常值)

python 复制代码
# 导入必要的库
import matplotlib.pyplot as plt
import numpy as np  # 用于生成模拟数据

# 🎲 模拟 6 个门店的月销量数据(单位:件)
np.random.seed(42)  # 设置随机种子,保证结果可复现

# 生成6组不同的销量分布数据(每组15~20个样本)
data = [
    np.random.normal(120, 15, 20),  # 门店1:均值120,标准差15
    np.random.normal(130, 20, 20),  # 门店2
    np.random.normal(110, 10, 20),  # 门店3
    np.random.normal(150, 30, 20),  # 门店4(波动大,可能有异常值)
    np.random.normal(125, 18, 20),  # 门店5
    np.random.normal(140, 25, 20),  # 门店6
]

# 设置中文字体(防止中文显示为方块)
plt.rcParams['font.sans-serif'] = ['SimHei']  # 黑体
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制箱线图
plt.boxplot(
    data,
    vert=True,            # 垂直箱线图(True:竖直,False:水平)
    patch_artist=True,    # 填充箱体颜色
    notch=False,          # 不显示中位数置信区间凹槽
    showfliers=True,      # 显示异常值(outliers)
    tick_labels=['门店1', '门店2', '门店3', '门店4', '门店5', '门店6'],  # x轴标签
)

# 添加标题和轴标签
plt.title('各门店销量分布箱线图', fontsize=16)
plt.xlabel('门店', fontsize=12)
plt.ylabel('销量(件)', fontsize=12)

# 添加网格(便于观察)
plt.grid(True, alpha=0.3)

# 显示图表
plt.show()
相关推荐
过往入尘土3 小时前
回归与分类算法全解析:从理论到实践
分类·数据挖掘·回归
weixin_446260854 小时前
轻松可视化数据的利器——JSON Crack
信息可视化·json
数据智能老司机5 小时前
Snowflake Cortex AI:面向生成式 AI 应用的解决方案——机器学习函数概览
大数据·架构·数据分析
Python极客之家6 小时前
基于数据挖掘的银行贷款审批预测系统
人工智能·python·机器学习·数据挖掘·毕业设计
数据智能老司机7 小时前
Snowflake Cortex AI:面向生成式 AI 应用的解决方案——理解 Snowflake Cortex
大数据·架构·数据分析
数据智能老司机7 小时前
Snowflake Cortex AI:面向生成式 AI 应用的解决方案——Snowflake 生态中的 AI/ML 入门
大数据·架构·数据分析
嵌入式-老费9 小时前
Easyx图形库应用(和Server程序进行交互)
信息可视化
YangYang9YangYan9 小时前
理财经理的职业进阶:核心技能与成长路径解析
大数据·金融·数据分析
Guheyunyi1 天前
消防管理系统如何重构现代空间防御体系
大数据·运维·人工智能·安全·信息可视化·重构