目录
[1. 导入库和数据准备](#1. 导入库和数据准备)
[2. 折线图:展示销售趋势](#2. 折线图:展示销售趋势)
[3. 柱状图:展示销售和费用比较](#3. 柱状图:展示销售和费用比较)
[4. 散点图:展示客户数量与销售额关系](#4. 散点图:展示客户数量与销售额关系)
[5. 直方图:展示销售额分布](#5. 直方图:展示销售额分布)
[6. 组合图:展示多种数据](#6. 组合图:展示多种数据)
专栏:数学建模学习笔记
pycharm专业版免费激活教程见资源
python相关库的安装:pandas,numpy,matplotlib,statsmodels
总篇:【数学建模】---【新手小白到国奖选手】---【学习路线】
第一卷:【数学建模】---【Python库】---【Numpy】---【学习】
第二卷:【数学建模】------【python库】------【Pandas学习】
本章属于第三卷Matplotlib的学习
安装Matplotlib
在开始使用Matplotlib之前,必须先在你的Python环境中安装它。PyCharm提供了一种方便的方法来安装第三方库。下面是如何在PyCharm中安装Matplotlib的详细步骤:
1.打开PyCharm:
- 打开PyCharm并创建或打开一个现有的项目。
2.打开终端:
- 点击右下角的Terminal标签以打开终端窗口。
3.安装Matplotlib:
在终端中输入以下命令并按Enter键:
pip install matplotlib
4.确认安装:
import matplotlib.pyplot as plt
你可以通过再次在终端中运行以下命令来确认安装是否成功:
pip show matplotlib
导入Matplotlib
安装成功后,你需要在你的Python脚本中导入Matplotlib库。通常我们会使用以下导入语句:
matplotlib.pyplot
是Matplotlib库中的一个子模块,它提供了类似于MATLAB的绘图接口。plt
是一个常见的缩写,用于简化代码书写。
创建简单的折线图
折线图是一种显示数据变化趋势的基本图表类型。以下是一个创建简单折线图的详细步骤和代码解析:
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 创建图形
plt.plot(x, y)
# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 数据准备 :创建两个列表
x
和y
,分别表示横轴和纵轴的数据点。- 创建图形 :使用
plt.plot(x, y)
方法绘制折线图。plot
方法的第一个参数是x轴数据,第二个参数是y轴数据。- 添加标题和标签 :使用
plt.title
方法添加图形的标题,使用plt.xlabel
和plt.ylabel
方法为横轴和纵轴添加标签。- 显示图形 :使用
plt.show()
方法显示图形。
创建子图
子图用于在同一个图形窗口中展示多个图表。以下是一个创建两个子图的详细示例:
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y1 = [2, 3, 5, 7, 11]
y2 = [1, 4, 6, 8, 10]
# 创建子图
fig, (ax1, ax2) = plt.subplots(2, 1)
# 第一个子图
ax1.plot(x, y1)
ax1.set_title('First Subplot')
# 第二个子图
ax2.plot(x, y2)
ax2.set_title('Second Subplot')
# 调整布局
plt.tight_layout()
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 数据准备 :创建三个列表
x
、y1
和y2
,分别表示两个子图的x轴和y轴数据。- 创建子图 :使用
plt.subplots
方法创建一个包含两个子图的图形。plt.subplots(2, 1)
表示创建一个两行一列的子图布局,fig
是图形对象,ax1
和ax2
是两个子图对象。- 绘制子图 :分别使用
ax1.plot
和ax2.plot
方法绘制两个子图。- 添加标题 :分别使用
ax1.set_title
和ax2.set_title
方法为两个子图添加标题。- 调整布局 :使用
plt.tight_layout()
方法自动调整子图布局,使其不重叠。- 显示图形 :使用
plt.show()
方法显示图形。
创建柱状图
柱状图用于展示分类数据的分布。以下是一个创建简单柱状图的详细示例:
import matplotlib.pyplot as plt
# 数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [5, 7, 3, 8, 6]
# 创建柱状图
plt.bar(categories, values)
# 添加标题和标签
plt.title('Simple Bar Chart')
plt.xlabel('Categories')
plt.ylabel('Values')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。 - 数据准备 :创建两个列表
categories
和values
,分别表示分类和对应的值。 - 创建柱状图 :使用
plt.bar(categories, values)
方法创建柱状图。第一个参数是分类,第二个参数是对应的值。 - 添加标题和标签 :使用
plt.title
方法添加图形的标题,使用plt.xlabel
和plt.ylabel
方法为横轴和纵轴添加标签。 - 显示图形 :使用
plt.show()
方法显示图形。
创建散点图
散点图用于显示两个变量之间的关系。以下是一个创建简单散点图的详细示例:
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 创建散点图
plt.scatter(x, y)
# 添加标题和标签
plt.title('Simple Scatter Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 数据准备 :创建两个列表
x
和y
,分别表示横轴和纵轴的数据点。- 创建散点图 :使用
plt.scatter(x, y)
方法创建散点图。scatter
方法的第一个参数是x轴数据,第二个参数是y轴数据。- 添加标题和标签 :使用
plt.title
方法添加图形的标题,使用plt.xlabel
和plt.ylabel
方法为横轴和纵轴添加标签。- 显示图形 :使用
plt.show()
方法显示图形。
创建直方图
直方图用于展示数据的频率分布。以下是一个创建简单直方图的详细示例:
import matplotlib.pyplot as plt
# 数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 5]
# 创建直方图
plt.hist(data, bins=5, edgecolor='black')
# 添加标题和标签
plt.title('Simple Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。 - 数据准备 :创建一个列表
data
,表示数据样本。 - 创建直方图 :使用
plt.hist(data, bins=5, edgecolor='black')
方法创建直方图。hist
方法的第一个参数是数据样本,bins
参数表示直方图的柱子数量,edgecolor
参数设置柱子的边框颜色。 - 添加标题和标签 :使用
plt.title
方法添加图形的标题,使用plt.xlabel
和plt.ylabel
方法为横轴和纵轴添加标签。 - 显示图形 :使用
plt.show()
方法显示图形。
多图形组合
在同一个图形中组合多种不同类型的图形可以让你更全面地展示数据。以下是一个组合折线图和散点图的详细示例:
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y1 = [1, 4, 9, 16, 25]
y2 = [1, 3, 6, 10, 15]
# 创建图形和子图
fig, ax1 = plt.subplots()
# 绘制第一个数据集
ax1.plot(x, y1, 'g-') # 绿色实线
ax1.set_xlabel('X data')
ax1.set_ylabel('Y1 data', color='g')
# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.plot(x, y2, 'b--') # 蓝色虚线
ax2.set_ylabel('Y2 data', color='b')
# 添加标题
plt.title('Multiple Data Sets')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。 - 数据准备 :创建三个列表
x
、y1
和y2
,分别表示两个数据集的x轴和y轴数据。 - 创建图形和子图 :使用
plt.subplots()
方法创建图形和子图对象。fig
是图形对象,ax1
是第一个子图对象。 - 绘制第一个数据集 :使用
ax1.plot(x, y1, 'g-')
方法绘制第一个数据集。参数'g-'
表示绿色实线。 - 设置第一个Y轴标签 :使用
ax1.set_xlabel
和ax1.set_ylabel
方法设置第一个子图的x轴和y轴标签,color
参数设置标签颜色。 - 创建第二个Y轴 :使用
ax1.twinx()
方法创建第二个Y轴。 - 绘制第二个数据集 :使用
ax2.plot(x, y2, 'b--')
方法绘制第二个数据集。参数'b--'
表示蓝色虚线。 - 设置第二个Y轴标签 :使用
ax2.set_ylabel
方法设置第二个子图的y轴标签,color
参数设置标签颜色。 - 添加标题 :使用
plt.title
方法为整个图形添加标题。 - 显示图形 :使用
plt.show()
方法显示图形。
保存图形
创建图形后,你可能需要将其保存到文件中。Matplotlib允许你将图形保存为多种格式,包括PNG、PDF、SVG等。以下是一个保存图形为PNG文件的详细示例:
import matplotlib.pyplot as plt
# 数据
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
# 创建图形
plt.plot(x, y)
# 添加标题和标签
plt.title('Simple Line Plot')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
# 保存图形
plt.savefig('line_plot.png')
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。 - 数据准备 :创建两个列表
x
和y
,分别表示横轴和纵轴的数据点。 - 创建图形 :使用
plt.plot(x, y)
方法绘制折线图。 - 添加标题和标签 :使用
plt.title
方法添加图形的标题,使用plt.xlabel
和plt.ylabel
方法为横轴和纵轴添加标签。 - 保存图形 :使用
plt.savefig('line_plot.png')
方法将图形保存为PNG文件。你可以根据需要更改文件名和文件格式,例如line_plot.pdf
或line_plot.svg
。 - 显示图形 :使用
plt.show()
方法显示图形。
结论
Matplotlib是一个功能强大且灵活的Python库,非常适合用于数学建模和数据可视化。通过以上详细的示例和解析,你可以掌握Matplotlib的基本用法,并在实际项目中应用这些技能进行数据分析和展示。随着你对Matplotlib的深入了解,你可以进一步探索更多高级功能,如自定义图形样式、添加图例、调整图形布局等,使你的图形更具专业性和表现力。
实战案例:数据分析与可视化
为了更好地理解和应用Matplotlib,我们将通过一个实际案例来展示如何使用Matplotlib进行数据分析与可视化。我们将分析一个虚构的数据集,该数据集包含某家公司在不同月份的销售数据,并展示如何绘制折线图、柱状图、散点图、直方图和组合图。
数据集说明
我们假设有一个包含以下信息的数据集:
month
: 月份(1月到12月)sales
: 销售额(单位:千元)expenses
: 费用(单位:千元)customers
: 客户数量
数据如下:
data = {
'month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
'sales': [20, 34, 30, 35, 27, 25, 30, 32, 31, 29, 28, 35],
'expenses': [12, 17, 18, 23, 22, 19, 20, 21, 19, 20, 18, 22],
'customers': [200, 240, 230, 250, 220, 210, 230, 240, 235, 220, 215, 250]
}
1. 导入库和数据准备
首先,导入必要的库并准备数据:
import matplotlib.pyplot as plt
data = {
'month': ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
'sales': [20, 34, 30, 35, 27, 25, 30, 32, 31, 29, 28, 35],
'expenses': [12, 17, 18, 23, 22, 19, 20, 21, 19, 20, 18, 22],
'customers': [200, 240, 230, 250, 220, 210, 230, 240, 235, 220, 215, 250]
}
2. 折线图:展示销售趋势
折线图适合用来展示数据随时间的变化趋势。我们来绘制销售额随月份变化的折线图:
plt.plot(data['month'], data['sales'], marker='o', linestyle='-', color='b')
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales (in thousands)')
plt.grid(True)
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 准备数据:使用字典形式准备数据。
- 绘制折线图 :使用
plt.plot
方法绘制折线图,marker='o'
表示数据点使用圆形标记,linestyle='-'
表示实线,color='b'
表示蓝色。- 添加标题和标签 :使用
plt.title
、plt.xlabel
和plt.ylabel
方法添加图形标题和轴标签。- 显示网格 :使用
plt.grid(True)
方法显示网格线。- 显示图形 :使用
plt.show()
方法显示图形。
3. 柱状图:展示销售和费用比较
柱状图适合用来比较不同类别的数据。我们来绘制销售额和费用的柱状图:
import numpy as np
# 设置柱的宽度和位置
bar_width = 0.35
index = np.arange(len(data['month']))
# 创建柱状图
plt.bar(index, data['sales'], bar_width, label='Sales', color='b')
plt.bar(index + bar_width, data['expenses'], bar_width, label='Expenses', color='r')
# 添加标题和标签
plt.xlabel('Month')
plt.ylabel('Amount (in thousands)')
plt.title('Sales vs Expenses')
plt.xticks(index + bar_width / 2, data['month'])
plt.legend()
# 显示图形
plt.show()
代码解析:
- 导入库 :除了
matplotlib.pyplot
,还需要导入numpy
来处理数组和索引。- 设置柱的宽度和位置 :使用
bar_width
设置每个柱子的宽度,使用np.arange
创建一个数组表示每个柱子的x轴位置。- 创建柱状图 :使用
plt.bar
方法绘制柱状图,第一个参数是x轴位置,第二个参数是数据值,bar_width
设置柱子的宽度,label
设置图例标签,color
设置颜色。- 添加标题和标签 :使用
plt.xlabel
、plt.ylabel
和plt.title
方法添加图形标题和轴标签。- 设置x轴刻度 :使用
plt.xticks
方法设置x轴刻度的位置和标签。- 添加图例 :使用
plt.legend()
方法显示图例。- 显示图形 :使用
plt.show()
方法显示图形。
4. 散点图:展示客户数量与销售额关系
散点图适合用来展示两个变量之间的关系。我们来绘制客户数量与销售额的散点图:
plt.scatter(data['customers'], data['sales'], color='g')
plt.title('Customers vs Sales')
plt.xlabel('Number of Customers')
plt.ylabel('Sales (in thousands)')
plt.grid(True)
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 准备数据:使用字典形式准备数据。
- 绘制散点图 :使用
plt.scatter
方法绘制散点图,第一个参数是x轴数据,第二个参数是y轴数据,color
参数设置数据点颜色。- 添加标题和标签 :使用
plt.title
、plt.xlabel
和plt.ylabel
方法添加图形标题和轴标签。- 显示网格 :使用
plt.grid(True)
方法显示网格线。- 显示图形 :使用
plt.show()
方法显示图形。
5. 直方图:展示销售额分布
直方图适合用来展示数据的频率分布。我们来绘制销售额的直方图:
plt.hist(data['sales'], bins=5, edgecolor='black')
plt.title('Sales Distribution')
plt.xlabel('Sales (in thousands)')
plt.ylabel('Frequency')
plt.grid(True)
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。 - 准备数据:使用字典形式准备数据。
- 绘制直方图 :使用
plt.hist
方法绘制直方图,第一个参数是数据样本,bins
参数设置直方图的柱子数量,edgecolor
参数设置柱子的边框颜色。 - 添加标题和标签 :使用
plt.title
、plt.xlabel
和plt.ylabel
方法添加图形标题和轴标签。 - 显示网格 :使用
plt.grid(True)
方法显示网格线。 - 显示图形 :使用
plt.show()
方法显示图形。
6. 组合图:展示多种数据
组合图可以同时展示多种类型的数据。我们来创建一个组合图,包含折线图和柱状图:
fig, ax1 = plt.subplots()
# 折线图:销售额
ax1.plot(data['month'], data['sales'], 'b-', marker='o', label='Sales')
ax1.set_xlabel('Month')
ax1.set_ylabel('Sales (in thousands)', color='b')
ax1.tick_params('y', colors='b')
# 创建第二个Y轴
ax2 = ax1.twinx()
ax2.bar(data['month'], data['expenses'], alpha=0.6, color='r', label='Expenses')
ax2.set_ylabel('Expenses (in thousands)', color='r')
ax2.tick_params('y', colors='r')
# 添加标题
plt.title('Monthly Sales and Expenses')
# 添加图例
fig.tight_layout()
fig.legend(loc='upper left', bbox_to_anchor=(0.1,0.9))
# 显示图形
plt.show()
代码解析:
- 导入库 :使用
import matplotlib.pyplot as plt
导入Matplotlib库。- 准备数据:使用字典形式准备数据。
- 创建图形和子图 :使用
plt.subplots()
方法创建图形和子图对象。fig
是图形对象,ax1
是第一个子图对象。- 绘制折线图 :使用
ax1.plot
方法绘制折线图,设置折线图颜色和标记样式。- 设置第一个Y轴标签 :使用
ax1.set_xlabel
和ax1.set_ylabel
方法设置第一个子图的x轴和y轴标签,color
参数设置标签颜色。- 创建第二个Y轴 :使用
ax1.twinx()
方法创建第二个Y轴。- 绘制柱状图 :使用
ax2.bar
方法绘制柱状图,设置柱状图颜色和透明度。- 设置第二个Y轴标签 :使用
ax2.set_ylabel
方法设置第二个子图的y轴标签,color
参数设置标签颜色。- 添加标题 :使用
plt.title
方法为整个图形添加标题。- 调整布局和添加图例 :使用
fig.tight_layout()
方法自动调整布局,使用fig.legend
方法添加图例,设置图例的位置。- 显示图形 :使用
plt.show()
方法显示图形。