1.折线图(趋势数据分析)
# 导入必要的库
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.条形图(数据之间的对比)
# 导入必要的库
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.饼图(比例分布)
# 导入必要的库
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.散点图(两变量之间的相关性)
# 导入必要的库
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.箱线图(数据分布范围和异常值)
# 导入必要的库
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,标准差15np.random.normal(130, 20, 20), # 门店2np.random.normal(110, 10, 20), # 门店3np.random.normal(150, 30, 20), # 门店4(波动大,可能有异常值)np.random.normal(125, 18, 20), # 门店5np.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()
