第三篇 机器学习基础 Matplotlib
程序员文章站
2022-03-20 23:31:27
...
导入模块库
import matplotlib.pyplot as plt
import random
中文显示问题
显示中文字体:matplotlib显示中文 https://www.cnblogs.com/hhh5460/p/4323985.html
常见图形及意义
1。折线图(plot):显示数据变化趋势,反映事务的变化情况。(变化)
2。散点图(scatter):判断变量之间是否存在数量关联趋势,展示离群点。(分布规律)
3。柱状图(bar):绘制离散性的数据,可直观看出各个数据的大小,比较数据之间的差别。(统计/对比)
4。直方图(hist):绘制连续性的数据,展示一组或多组数据的分布情况。(统计)
5。饼图(pie):分类数据的占比情况。(占比)
1 折线图的绘制和显示
def line_chart():
# 1. 创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 绘制图像
plt.plot([1,2,3,4,5,6,7], [17,17,18,15,11,11,13])
# 3. 显示图像
plt.show()
1. 2 折线图高级:某城市温度变化图
def line_chart_city():
# 0. 准备坐标数据
x_data = range(60)
y_data = [random.uniform(15, 18) for i in x_data] # 生成 15到18之间的一些数据
# 1. 创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 绘制图像
plt.plot(x_data, y_data)
# 2.1 设置自定义的坐标轴刻度
x_tick = ['11点{}分'.format(i) for i in x_data]
y_tick = range(40)
plt.rcParams['axes.unicode_minus'] = False #(解决坐标轴负数的负号显示问题)
# 添加坐标轴刻度,不可以直接通过字符串进行修改
plt.xticks(x_data[::5], x_tick[::5], fontproperties="SimHei") # [::5] 从头到尾 间隔 5个来切分 [开始索引:结束索引:步长]
plt.yticks(y_tick[::5])
# 2.4 添加网格显示 alpha代表透明度
plt.grid(True, linestyle='--', alpha=0.5)
# 2.5 添加描述信息
plt.xlabel('时间', fontproperties="SimHei")
plt.ylabel('温度', fontproperties="SimHei")
plt.title('中午十一点到十二点的某城市的温度变化图', fontsize=20, fontproperties="SimHei")
# 2.6 图像保存
plt.savefig('./testMatplotlib1.png')
# 3. 显示图像
plt.show()
1.3 折线图高级:一个画板一个坐标系下绘制多个图像
def line_chart_moreLines():
# 0. 准备数据
x_data = range(60)
y_data = [random.uniform(15, 18) for i in x_data] # 生成 15到18之间的一些数据
y_data2 = [random.uniform(1, 3) for i in x_data]
# 1. 创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2. 多次绘制图像
plt.plot(x_data, y_data, label='ShangHai')
plt.plot(x_data, y_data2, color='r', linestyle='--', label='BeiJing') # 设置颜色为红色,线条为虚线
# 2.1 设置自定义的坐标轴刻度
x_tick = ['11点{}分'.format(i) for i in x_data]
y_tick = range(40)
# 修改 坐标轴的坐标刻度显示
# 2.2 坐标刻度,不可以直接通过字符串进行修改
plt.rcParams['axes.unicode_minus'] = False
# 2.3 显示中文字体
plt.xticks(x_data[::5], x_tick[::5], fontproperties="SimHei")
plt.yticks(y_tick[::5])
# 2.4 添加网格显示 alpha代表透明度
plt.grid(True, linestyle='--', alpha=0.5)
# 2.5 添加描述信息
plt.xlabel('时间', fontproperties="SimHei")
plt.ylabel('温度', fontproperties="SimHei")
plt.title('中午十一点到十二点的某城市的温度变化图', fontsize=20, fontproperties="SimHei")
# 2.6 显示图例
plt.legend(loc='best')
# 2.7 图像保存
plt.savefig('./testMatplotlib2.png')
# 3. 显示图像
plt.show()
1.4 折线图高级:一个画板多个坐标系绘制多个图像
def line_chart_more_axis():
# 0. 准备数据
x = range(60)
y_sh = [random.uniform(15, 18) for i in x]
y_bj = [random.uniform(1, 3) for i in x]
# 1. 创建画布 创建一行两列两个子图
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2. 多次绘制图像
axes[0].plot(x, y_sh, label='ShangHai')
axes[1].plot(x, y_bj, color='r', linestyle='--', label='BeiJing')
# 2.1 设置自定义的坐标轴刻度
x_tick_labels = ['11点{}分'.format(i) for i in x]
y_tick = range(40)
# 修改 坐标轴的坐标刻度显示
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_tick[::5])
axes[0].set_xticklabels(x_tick_labels[::5], fontproperties="SimHei", fontsize=6)
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_tick[::5])
axes[1].set_xticklabels(x_tick_labels[::5], fontproperties="SimHei", fontsize=6)
# 2.2 添加网格显示
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)
# 2.3 添加描述信息
axes[0].set_xlabel('时间', fontproperties="SimHei")
axes[0].set_ylabel('温度', fontproperties="SimHei")
axes[0].set_title('中午十一点到十二点的某城市的温度变化图', fontsize=20, fontproperties="SimHei")
axes[1].set_xlabel('时间', fontproperties="SimHei")
axes[1].set_ylabel('温度', fontproperties="SimHei")
axes[1].set_title('中午十一点到十二点的某城市的温度变化图', fontsize=20, fontproperties="SimHei")
# 2.4 显示图例
axes[0].legend(loc='best')
axes[1].legend(loc='best')
# 2.5 图像保存
plt.savefig('./testMatplotlib3.png')
# 3. 显示图像
plt.show()
1.5 案例:绘制交通流量折线图
dataset["number"]=dataset["straightFlow"]+dataset["leftFlow"]
t1=dataset[dataset["cross"]=="wuhe_zhangheng"]
t1=t1.groupby(["time"]).sum().reset_index(level=["time"])
xs = list(map(lambda x : datetime.strptime(x, '%Y/%m/%d %H:%M:%S'),t1["time"]))
t1["timeindex"] = [(x.hour*60+x.minute) for x in xs]
fig1=plt.figure(num=1,figsize=(80,8),dpi=80)
ax1=fig1.add_subplot(1,1,1)
ax1.plot(xs,t1["number"])
plt.show()